@cube-dev/ui-kit 0.136.0 → 0.137.0

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 (437) hide show
  1. package/dist/CHANGELOG.md +30 -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 +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +6 -6
  17. package/dist/components/Root.js.map +1 -1
  18. package/dist/components/actions/Action/Action.js +1 -1
  19. package/dist/components/actions/Banner/Banner.js +1 -1
  20. package/dist/components/actions/Button/Button.js +1 -1
  21. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  22. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  23. package/dist/components/actions/ButtonSplit/context.js +1 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  25. package/dist/components/actions/CommandMenu/styled.js +1 -1
  26. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  27. package/dist/components/actions/ItemActionContext.js +1 -1
  28. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  29. package/dist/components/actions/Link/Link.js +1 -1
  30. package/dist/components/actions/Menu/Menu.js +1 -1
  31. package/dist/components/actions/Menu/MenuItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuSection.js +1 -1
  33. package/dist/components/actions/Menu/MenuTrigger.js +11 -8
  34. package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/InlineInput/InlineInput.d.ts +84 -0
  58. package/dist/components/content/InlineInput/InlineInput.js +264 -0
  59. package/dist/components/content/InlineInput/InlineInput.js.map +1 -0
  60. package/dist/components/content/InlineInput/index.d.ts +2 -0
  61. package/dist/components/content/Item/Item.js +1 -1
  62. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  63. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  64. package/dist/components/content/Layout/GridLayout.js +1 -1
  65. package/dist/components/content/Layout/Layout.js +1 -1
  66. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  67. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  68. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  69. package/dist/components/content/Layout/LayoutContent.js +1 -1
  70. package/dist/components/content/Layout/LayoutContext.js +1 -1
  71. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  72. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  73. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  74. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  75. package/dist/components/content/Layout/LayoutPane.js +1 -1
  76. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  77. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  78. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  79. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  80. package/dist/components/content/Layout/index.js +1 -1
  81. package/dist/components/content/Layout/utils.js +1 -1
  82. package/dist/components/content/Paragraph.js +1 -1
  83. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  84. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  85. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  86. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  87. package/dist/components/content/Result/Result.js +1 -1
  88. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  89. package/dist/components/content/Tag/Tag.js +1 -1
  90. package/dist/components/content/Text.js +1 -1
  91. package/dist/components/content/TextItem/TextItem.js +1 -1
  92. package/dist/components/content/Title.js +1 -1
  93. package/dist/components/content/Tree/Tree.js +1 -1
  94. package/dist/components/content/Tree/TreeNode.js +1 -1
  95. package/dist/components/content/Tree/styled.js +1 -1
  96. package/dist/components/content/Tree/tree-index.js +1 -1
  97. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  98. package/dist/components/content/Tree/use-load-data.js +1 -1
  99. package/dist/components/content/highlightText.js +1 -1
  100. package/dist/components/content/use-auto-tooltip.js +1 -1
  101. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  102. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  103. package/dist/components/fields/Checkbox/context.js +1 -1
  104. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  105. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  106. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  107. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  108. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  109. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  110. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  111. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  112. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  113. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  114. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  115. package/dist/components/fields/DatePicker/intl.js +1 -1
  116. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  117. package/dist/components/fields/DatePicker/props.js +1 -1
  118. package/dist/components/fields/DatePicker/utils.js +1 -1
  119. package/dist/components/fields/FileInput/FileInput.js +1 -1
  120. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  121. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  122. package/dist/components/fields/Input/Input.js +1 -1
  123. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  124. package/dist/components/fields/ListBox/ListBox.js +7 -4
  125. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  126. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  127. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  128. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  129. package/dist/components/fields/Picker/Picker.js +1 -1
  130. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  131. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  132. package/dist/components/fields/RadioGroup/context.js +1 -1
  133. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  134. package/dist/components/fields/Select/Select.js +4 -2
  135. package/dist/components/fields/Select/Select.js.map +1 -1
  136. package/dist/components/fields/Slider/Gradation.js +1 -1
  137. package/dist/components/fields/Slider/HueSlider.js +1 -1
  138. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  139. package/dist/components/fields/Slider/Slider.js +1 -1
  140. package/dist/components/fields/Slider/SliderBase.js +1 -1
  141. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  142. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  143. package/dist/components/fields/Slider/elements.js +1 -1
  144. package/dist/components/fields/Slider/index.js +1 -1
  145. package/dist/components/fields/Switch/Switch.js +1 -1
  146. package/dist/components/fields/TextArea/TextArea.js +1 -1
  147. package/dist/components/fields/TextInput/TextInput.js +1 -1
  148. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  149. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  150. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  151. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  152. package/dist/components/form/Form/Field.js +1 -1
  153. package/dist/components/form/Form/Form.js +1 -1
  154. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  155. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  156. package/dist/components/form/Form/SubmitError.js +1 -1
  157. package/dist/components/form/Form/index.js +1 -1
  158. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  159. package/dist/components/form/Form/use-field/use-field.js +1 -1
  160. package/dist/components/form/Form/use-form.js +1 -1
  161. package/dist/components/form/Form/validation.js +1 -1
  162. package/dist/components/form/Label.js +1 -1
  163. package/dist/components/form/wrapper.js +1 -1
  164. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  165. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  166. package/dist/components/layout/Flex.js +1 -1
  167. package/dist/components/layout/Flow.js +1 -1
  168. package/dist/components/layout/Grid.js +1 -1
  169. package/dist/components/layout/Panel.js +1 -1
  170. package/dist/components/layout/Prefix.js +1 -1
  171. package/dist/components/layout/ResizablePanel.js +1 -1
  172. package/dist/components/layout/Space.js +1 -1
  173. package/dist/components/layout/Suffix.js +1 -1
  174. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  175. package/dist/components/navigation/Tabs/TabButton.js +24 -21
  176. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  177. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  178. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  179. package/dist/components/navigation/Tabs/TabPicker.js +1 -2
  180. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  181. package/dist/components/navigation/Tabs/Tabs.js +2 -6
  182. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  183. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  184. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  185. package/dist/components/navigation/Tabs/TabsContext.js.map +1 -1
  186. package/dist/components/navigation/Tabs/styled.js +2 -24
  187. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  188. package/dist/components/navigation/Tabs/types.js +1 -1
  189. package/dist/components/navigation/Tabs/use-tab-editing.js +7 -13
  190. package/dist/components/navigation/Tabs/use-tab-editing.js.map +1 -1
  191. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  192. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  193. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  194. package/dist/components/other/Calendar/Calendar.js +1 -1
  195. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  196. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  197. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  198. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  199. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  200. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  201. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  202. package/dist/components/overlays/Dialog/Dialog.js +12 -5
  203. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  204. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  205. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  206. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  207. package/dist/components/overlays/Dialog/context.js +1 -1
  208. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  209. package/dist/components/overlays/Modal/Modal.js +1 -1
  210. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  211. package/dist/components/overlays/Modal/Overlay.js +1 -1
  212. package/dist/components/overlays/Modal/Popover.js +1 -1
  213. package/dist/components/overlays/Modal/Tray.js +1 -1
  214. package/dist/components/overlays/Modal/Underlay.js +1 -1
  215. package/dist/components/overlays/Notifications/Notification.js +1 -1
  216. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  217. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  218. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  219. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  220. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  221. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  222. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  223. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  224. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  225. package/dist/components/overlays/Notifications/index.js +1 -1
  226. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  227. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  228. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  229. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  230. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  231. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  232. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  233. package/dist/components/overlays/Toast/index.js +1 -1
  234. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  235. package/dist/components/overlays/Toast/useToast.js +1 -1
  236. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  237. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  238. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  239. package/dist/components/overlays/Tooltip/context.js +1 -1
  240. package/dist/components/portal/Portal.js +1 -1
  241. package/dist/components/portal/PortalProvider.js +1 -1
  242. package/dist/components/portal/usePortal.js +1 -1
  243. package/dist/components/shared/DraggableCollection.js +1 -1
  244. package/dist/components/shared/InvalidIcon.js +1 -1
  245. package/dist/components/shared/ValidIcon.js +1 -1
  246. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  247. package/dist/components/status/Spin/Cube.js +1 -1
  248. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  249. package/dist/components/status/Spin/Spin.js +1 -1
  250. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  251. package/dist/data/item-themes.js +1 -1
  252. package/dist/data/themes.js +1 -1
  253. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  254. package/dist/icons/AdjustmentsIcon.js +1 -1
  255. package/dist/icons/AiIcon.js +1 -1
  256. package/dist/icons/AreaChartIcon.js +1 -1
  257. package/dist/icons/BackwardIcon.js +1 -1
  258. package/dist/icons/BarChartIcon.js +1 -1
  259. package/dist/icons/BellFilledIcon.js +1 -1
  260. package/dist/icons/BellIcon.js +1 -1
  261. package/dist/icons/BooleanIcon.js +1 -1
  262. package/dist/icons/CalendarEditIcon.js +1 -1
  263. package/dist/icons/CalendarIcon.js +1 -1
  264. package/dist/icons/CaretDownIcon.js +1 -1
  265. package/dist/icons/CaretUpIcon.js +1 -1
  266. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  267. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  268. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  269. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  270. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  271. package/dist/icons/ChartBarLineIcon.js +1 -1
  272. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  273. package/dist/icons/ChartBarStackedIcon.js +1 -1
  274. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  275. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  276. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  277. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  278. package/dist/icons/ChartBubbleIcon.js +1 -1
  279. package/dist/icons/ChartDonut2Icon.js +1 -1
  280. package/dist/icons/ChartFunnelIcon.js +1 -1
  281. package/dist/icons/ChartHeatmapIcon.js +1 -1
  282. package/dist/icons/ChartKPIIcon.js +1 -1
  283. package/dist/icons/ChartPie2Icon.js +1 -1
  284. package/dist/icons/ChartScatterIcon.js +1 -1
  285. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  286. package/dist/icons/CheckCircleIcon.js +1 -1
  287. package/dist/icons/CheckIcon.js +1 -1
  288. package/dist/icons/CircleFilledIcon.js +1 -1
  289. package/dist/icons/ClearIcon.js +1 -1
  290. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  291. package/dist/icons/CloseCircleIcon.js +1 -1
  292. package/dist/icons/CloseIcon.js +1 -1
  293. package/dist/icons/CodeIcon.js +1 -1
  294. package/dist/icons/ColumnTotalIcon.js +1 -1
  295. package/dist/icons/CopyIcon.js +1 -1
  296. package/dist/icons/CountIcon.js +1 -1
  297. package/dist/icons/CubeIcon.js +1 -1
  298. package/dist/icons/CubePauseIcon.js +1 -1
  299. package/dist/icons/CubePlayIcon.js +1 -1
  300. package/dist/icons/CurrencyDollarIcon.js +1 -1
  301. package/dist/icons/DangerIcon.js +1 -1
  302. package/dist/icons/DashboardIcon.js +1 -1
  303. package/dist/icons/DatabaseIcon.js +1 -1
  304. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  305. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  306. package/dist/icons/DirectionIcon.js +1 -1
  307. package/dist/icons/DonutIcon.js +1 -1
  308. package/dist/icons/DownIcon.js +1 -1
  309. package/dist/icons/EditIcon.js +1 -1
  310. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  311. package/dist/icons/ExclamationCircleIcon.js +1 -1
  312. package/dist/icons/ExclamationIcon.js +1 -1
  313. package/dist/icons/EyeIcon.js +1 -1
  314. package/dist/icons/EyeInvisibleIcon.js +1 -1
  315. package/dist/icons/FilterIcon.js +1 -1
  316. package/dist/icons/FolderFilledIcon.js +1 -1
  317. package/dist/icons/FolderIcon.js +1 -1
  318. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  319. package/dist/icons/FolderOpenIcon.js +1 -1
  320. package/dist/icons/ForwardIcon.js +1 -1
  321. package/dist/icons/GripVerticalIcon.js +1 -1
  322. package/dist/icons/HierarchyIcon.js +1 -1
  323. package/dist/icons/HierarchyOpenIcon.js +1 -1
  324. package/dist/icons/Icon.js +1 -1
  325. package/dist/icons/InfoCircleIcon.js +1 -1
  326. package/dist/icons/InfoIcon.js +1 -1
  327. package/dist/icons/KeyIcon.js +1 -1
  328. package/dist/icons/LeftIcon.js +1 -1
  329. package/dist/icons/LineChartIcon.js +1 -1
  330. package/dist/icons/LoadingIcon.js +1 -1
  331. package/dist/icons/LockFilledIcon.js +1 -1
  332. package/dist/icons/LockIcon.js +1 -1
  333. package/dist/icons/MoreIcon.js +1 -1
  334. package/dist/icons/NotAllowedIcon.js +1 -1
  335. package/dist/icons/Number123Icon.js +1 -1
  336. package/dist/icons/NumberIcon.js +1 -1
  337. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  338. package/dist/icons/PauseCircleIcon.js +1 -1
  339. package/dist/icons/PauseIcon.js +1 -1
  340. package/dist/icons/PercentageIcon.js +1 -1
  341. package/dist/icons/PieChartIcon.js +1 -1
  342. package/dist/icons/PlayCircleIcon.js +1 -1
  343. package/dist/icons/PlayIcon.js +1 -1
  344. package/dist/icons/PlusIcon.js +1 -1
  345. package/dist/icons/ProgressBarIcon.js +1 -1
  346. package/dist/icons/ReloadIcon.js +1 -1
  347. package/dist/icons/ReportIcon.js +1 -1
  348. package/dist/icons/ReturnIcon.js +1 -1
  349. package/dist/icons/RightIcon.js +1 -1
  350. package/dist/icons/RowTotalsIcon.js +1 -1
  351. package/dist/icons/SchemeIcon.js +1 -1
  352. package/dist/icons/SearchIcon.js +1 -1
  353. package/dist/icons/SemanticQueryIcon.js +1 -1
  354. package/dist/icons/SettingsIcon.js +1 -1
  355. package/dist/icons/ShieldFilledIcon.js +1 -1
  356. package/dist/icons/ShieldIcon.js +1 -1
  357. package/dist/icons/SlashIcon.js +1 -1
  358. package/dist/icons/SparklesIcon.js +1 -1
  359. package/dist/icons/SqlIcon.js +1 -1
  360. package/dist/icons/StatsIcon.js +1 -1
  361. package/dist/icons/StopIcon.js +1 -1
  362. package/dist/icons/StringIcon.js +1 -1
  363. package/dist/icons/SubtotalsIcon.js +1 -1
  364. package/dist/icons/SwitchIcon.js +1 -1
  365. package/dist/icons/TableIcon.js +1 -1
  366. package/dist/icons/ThumbsDownIcon.js +1 -1
  367. package/dist/icons/ThumbsUpIcon.js +1 -1
  368. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  369. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  370. package/dist/icons/ThunderboltIcon.js +1 -1
  371. package/dist/icons/TimeIcon.js +1 -1
  372. package/dist/icons/TrashIcon.js +1 -1
  373. package/dist/icons/UnlockIcon.js +1 -1
  374. package/dist/icons/UpIcon.js +1 -1
  375. package/dist/icons/UserGroupIcon.js +1 -1
  376. package/dist/icons/UserIcon.js +1 -1
  377. package/dist/icons/UserLockIcon.js +1 -1
  378. package/dist/icons/ViewIcon.js +1 -1
  379. package/dist/icons/WarningFilledIcon.js +1 -1
  380. package/dist/icons/WarningIcon.js +1 -1
  381. package/dist/icons/wrap-icon.js +1 -1
  382. package/dist/index.d.ts +3 -1
  383. package/dist/index.js +3 -2
  384. package/dist/index.js.map +1 -1
  385. package/dist/provider.js +1 -1
  386. package/dist/providers/TrackingProvider.js +1 -1
  387. package/dist/providers/navigationAdapter.default.js +1 -1
  388. package/dist/tokens/base.js +1 -1
  389. package/dist/tokens/colors.js +1 -1
  390. package/dist/tokens/index.js +1 -1
  391. package/dist/tokens/layout.js +1 -1
  392. package/dist/tokens/shadows.js +1 -1
  393. package/dist/tokens/sizes.js +1 -1
  394. package/dist/tokens/spacing.js +1 -1
  395. package/dist/tokens/typography.js +1 -1
  396. package/dist/utils/ResizeSensor.js +1 -1
  397. package/dist/utils/is-dev-env.js +1 -1
  398. package/dist/utils/modules.js +1 -1
  399. package/dist/utils/promise.js +1 -1
  400. package/dist/utils/raf.js +1 -1
  401. package/dist/utils/random.js +1 -1
  402. package/dist/utils/range.js +1 -1
  403. package/dist/utils/react/RenderCache.js +1 -1
  404. package/dist/utils/react/Slots.js +1 -1
  405. package/dist/utils/react/chain.js +1 -1
  406. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  407. package/dist/utils/react/index.js +1 -1
  408. package/dist/utils/react/interactions.js +1 -1
  409. package/dist/utils/react/isTextOnly.js +1 -1
  410. package/dist/utils/react/mapProps.js +1 -1
  411. package/dist/utils/react/mergeProps.js +1 -1
  412. package/dist/utils/react/nullableValue.js +1 -1
  413. package/dist/utils/react/resolveIcon.js +1 -1
  414. package/dist/utils/react/sharedStore.js +1 -1
  415. package/dist/utils/react/useCombinedRefs.js +1 -1
  416. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  417. package/dist/utils/react/useEventBus.js +1 -1
  418. package/dist/utils/react/useId.js +1 -1
  419. package/dist/utils/react/useIsDarwin.js +1 -1
  420. package/dist/utils/react/useKeySymbols.js +1 -1
  421. package/dist/utils/react/useLayoutEffect.js +1 -1
  422. package/dist/utils/react/useLocalStorage.js +1 -1
  423. package/dist/utils/react/useMergeStyles.js +1 -1
  424. package/dist/utils/react/usePopoverSync.js +1 -1
  425. package/dist/utils/react/useQaProps.js +1 -1
  426. package/dist/utils/react/useViewportSize.js +1 -1
  427. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  428. package/dist/utils/selection.js +1 -1
  429. package/dist/utils/styles.js +1 -1
  430. package/dist/utils/tree.js +1 -1
  431. package/dist/utils/warnings.js +1 -1
  432. package/dist/version.js +2 -2
  433. package/docs/components/content/InlineInput.md +278 -0
  434. package/docs/components/navigation/Tabs.md +1 -1
  435. package/package.json +1 -1
  436. package/dist/components/navigation/Tabs/EditableTitle.js +0 -100
  437. package/dist/components/navigation/Tabs/EditableTitle.js.map +0 -1
@@ -0,0 +1,278 @@
1
+ # InlineInput
2
+
3
+ Inline editable text. Displays a value as inline content and swaps to an auto-sizing text input when entering edit mode. Designed to drop into any text context (tab title, heading, paragraph, table cell) without style customization — typography, color, and font family all inherit from the parent.
4
+
5
+ Unlike `TextInput`, `InlineInput` is intentionally **not** a form field. It manages its own commit lifecycle (`onSubmit` / `onCancel`) rather than participating in form validation.
6
+
7
+ ## When to Use
8
+
9
+ - **Renameable items**: Tab titles, file names, board columns, list items
10
+ - **Edit-in-place fields**: Inline document titles, profile names, project labels
11
+ - **Lightweight string edits**: Cases where launching a modal or full form would be heavy
12
+
13
+ ## When Not to Use
14
+
15
+ - **Form fields**: Use `TextInput` (with `<Form>` + `Field`) for inputs that need validation rules
16
+ - **Multi-line text**: Single-line only in this version (multiline planned)
17
+ - **Complex inputs**: Use a proper input component when you need masks, prefixes/suffixes, or rich validation
18
+
19
+ ## Component
20
+
21
+ ---
22
+
23
+ ### Properties
24
+
25
+ - **`value`** `string` — Controlled value. When provided, the component is controlled.
26
+ - **`defaultValue`** `string` — Initial value for uncontrolled usage.
27
+ - **`onChange`** `(value: string) => void` — Fires on commit **only when the value actually changed**. Use this to update external state (controlled pattern).
28
+ - **`isEditing`** `boolean` — Controlled editing state. When provided, the editing state is controlled.
29
+ - **`defaultIsEditing`** `boolean` (default: `false`) — Default editing state for uncontrolled usage.
30
+ - **`onEditingChange`** `(isEditing: boolean) => void` — Called when editing mode starts or ends.
31
+ - **`onSubmit`** `(value: string) => void` — Fires every commit (Enter / submit-on-blur / `ref.stopEditing(true)`), even when the value did not change. Use for side effects (analytics, save toasts).
32
+ - **`onCancel`** `() => void` — Called when editing is cancelled (Escape or empty submit when `allowEmpty` is `false`).
33
+ - **`editTrigger`** `'dblclick' | 'click' | 'none'` (default: `dblclick`) — How edit mode is activated from the display element. Programmatic entry via `ref.startEditing()` works regardless.
34
+ - **`submitOnBlur`** `boolean` (default: `true`) — Whether to submit when focus leaves the input.
35
+ - **`trimOnSubmit`** `boolean` (default: `true`) — Whether to trim the value on submit.
36
+ - **`allowEmpty`** `boolean` (default: `false`) — When `false`, submitting an empty/whitespace value cancels instead.
37
+ - **`isDisabled`** `boolean` (default: `false`) — When `true`, edit mode cannot be entered (programmatically or otherwise).
38
+ - **`isReadOnly`** `boolean` (default: `false`) — When `true`, edit mode cannot be entered, but the display reads as enabled.
39
+ - **`placeholder`** `string` — Placeholder text shown in the input when the draft is empty.
40
+ - **`renderDisplay`** `(value: string) => ReactNode` — Custom render for display (non-editing) mode.
41
+ - **`inputStyles`** `Styles` — Convenience prop for styling the `Input` sub-element.
42
+
43
+ ### Base Properties
44
+
45
+ Supports [Base properties](../../BaseProperties.md).
46
+
47
+ ### Imperative Ref
48
+
49
+ The component exposes a ref with these methods:
50
+
51
+ - **`startEditing()`** — Programmatically enter edit mode. Always works regardless of `editTrigger`; blocked only by `isDisabled` / `isReadOnly`.
52
+ - **`stopEditing(submit?: boolean)`** — Programmatically exit edit mode. `submit=true` (default) commits, `submit=false` cancels.
53
+ - **`focus()`** — Focus the underlying element (input when editing, root span otherwise).
54
+ - **`getValue()`** — Get the current committed value.
55
+
56
+ ### Styling Properties
57
+
58
+ #### styles
59
+
60
+ Customizes the root element of the component.
61
+
62
+ **Sub-elements:**
63
+
64
+ - `Input` — The text input rendered in edit mode
65
+ - `Placeholder` — The placeholder text rendered in display mode when the value is empty
66
+ - `Measure` — The hidden text used to auto-size the input (rarely targeted)
67
+
68
+ #### inputStyles
69
+
70
+ Convenience prop equivalent to `styles={{ Input: { ... } }}`.
71
+
72
+ ### Style Properties
73
+
74
+ These properties allow direct style application without using the `styles` prop:
75
+
76
+ - **Position:** `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `zIndex`, `margin`, `inset`, `position`, `scrollMargin`
77
+ - **Dimension:** `width`, `height`, `flexBasis`, `flexGrow`, `flexShrink`, `flex`
78
+ - **Block:** `border`, `radius`, `shadow`, `outline`, `padding`, `paddingInline`, `paddingBlock`, `overflow`, `scrollbar`, `textAlign`
79
+ - **Color:** `color`, `fill`, `fade`, `image`
80
+
81
+ ### Modifiers
82
+
83
+ The `mods` property is automatically populated. Consumers can target these in their own `styles`:
84
+
85
+ | Modifier | Type | Description |
86
+ | ---------- | --------- | -------------------------------------------------------------------- |
87
+ | editing | `boolean` | Currently in edit mode |
88
+ | editable | `boolean` | `editTrigger` is `dblclick` or `click` and not disabled/read-only |
89
+ | disabled | `boolean` | `isDisabled` is `true` |
90
+ | read-only | `boolean` | `isReadOnly` is `true` |
91
+ | empty | `boolean` | The committed value is empty |
92
+
93
+ ## Examples
94
+
95
+ ### Basic Usage
96
+
97
+ ```jsx
98
+ <InlineInput defaultValue="Edit me" />
99
+ ```
100
+
101
+ ### Single-click Trigger
102
+
103
+ Enter edit mode on a single click instead of double-click:
104
+
105
+ ```jsx
106
+ <InlineInput defaultValue="Click me to edit" editTrigger="click" />
107
+ ```
108
+
109
+ ### Manual / Programmatic Trigger
110
+
111
+ When `editTrigger` is `none`, the display element is inert. Use the imperative ref to enter edit mode:
112
+
113
+ ```jsx
114
+ const ref = useRef<CubeInlineInputRef>(null);
115
+
116
+ <>
117
+ <InlineInput ref={ref} editTrigger="none" defaultValue="Use the button" />
118
+ <Button onPress={() => ref.current?.startEditing()}>Rename</Button>
119
+ </>
120
+ ```
121
+
122
+ ### Controlled Value
123
+
124
+ Track the value externally:
125
+
126
+ ```jsx
127
+ const [value, setValue] = useState('Controlled value');
128
+
129
+ <InlineInput value={value} onChange={setValue} />
130
+ ```
131
+
132
+ ### Controlled Editing State
133
+
134
+ Drive the editing state from outside (e.g. from a "Rename" button in a parent menu):
135
+
136
+ ```jsx
137
+ const [editing, setEditing] = useState(false);
138
+
139
+ <InlineInput
140
+ isEditing={editing}
141
+ onEditingChange={setEditing}
142
+ defaultValue="Controlled isEditing"
143
+ editTrigger="none"
144
+ />
145
+ ```
146
+
147
+ ### Inside a Heading
148
+
149
+ The component inherits all typography from its parent:
150
+
151
+ ```jsx
152
+ <Title level={2}>
153
+ <InlineInput defaultValue="Editable heading" />
154
+ </Title>
155
+ ```
156
+
157
+ ### Inline in Paragraph
158
+
159
+ Sits naturally inside text flow:
160
+
161
+ ```jsx
162
+ <p>
163
+ Hello, my name is <InlineInput defaultValue="John Doe" /> and I love editing
164
+ text in place.
165
+ </p>
166
+ ```
167
+
168
+ ### Placeholder for Empty Values
169
+
170
+ ```jsx
171
+ <InlineInput defaultValue="" placeholder="Untitled" />
172
+ ```
173
+
174
+ ### Allow Empty Values
175
+
176
+ By default, submitting an empty value cancels. Set `allowEmpty` to keep the empty value:
177
+
178
+ ```jsx
179
+ <InlineInput defaultValue="Clearable" allowEmpty placeholder="Empty allowed" />
180
+ ```
181
+
182
+ ### Disabled / Read-only
183
+
184
+ ```jsx
185
+ <InlineInput defaultValue="You can't edit me" isDisabled />
186
+ <InlineInput defaultValue="Read-only value" isReadOnly />
187
+ ```
188
+
189
+ ## Accessibility
190
+
191
+ ### Keyboard Navigation
192
+
193
+ - `Enter` — Commit the current draft
194
+ - `Escape` — Cancel and revert to the previous value
195
+ - `Tab` / focus loss — Commits when `submitOnBlur` is `true` (default), otherwise no-op
196
+ - Arrow keys, Space, Delete, Backspace — Work normally inside the input and do not bubble to the host
197
+
198
+ ### ARIA Properties
199
+
200
+ - **`aria-label`** — Provide a label when the input has no visible label associated. Recommended in all cases.
201
+ - **`aria-labelledby`** — Reference the id of a visible label element.
202
+
203
+ ### Focus Management
204
+
205
+ When entering edit mode, focus is taken explicitly by a `FocusScope` with `autoFocus`. This makes the transition deterministic even when triggered from a closing menu (which would otherwise restore focus to the menu trigger). The text content is selected automatically.
206
+
207
+ When leaving edit mode, focus is not restored automatically — the host is responsible for moving focus back to a meaningful element (e.g. the parent button or row).
208
+
209
+ ## Best Practices
210
+
211
+ 1. **Do**: Always provide an `aria-label` or `aria-labelledby` for screen reader users.
212
+
213
+ ```jsx
214
+ <InlineInput defaultValue="My document" aria-label="Document name" />
215
+ ```
216
+
217
+ 2. **Do**: Use `editTrigger="dblclick"` for items that are also clickable for selection (the default).
218
+
219
+ 3. **Don't**: Use `InlineInput` as a form field. Use `TextInput` inside a `<Form>` for that.
220
+
221
+ 4. **Don't**: Rely on `onChange` for keystroke-by-keystroke updates — it fires only on commit. Use `isEditing` + `onEditingChange` if you need to observe the editing lifecycle.
222
+
223
+ ### onChange vs onSubmit
224
+
225
+ These look similar but fire under different conditions. Pick the one that matches your intent:
226
+
227
+ | Event | Fires when | Typical use |
228
+ | ----------- | ------------------------------------------------------------------------- | ---------------------------------------- |
229
+ | `onChange` | The committed value is **different** from the previous value | Updating state (controlled pattern) |
230
+ | `onSubmit` | The user commits (Enter / blur / `ref.stopEditing(true)`) — always fires | Side effects (server save, toasts) |
231
+ | `onCancel` | Escape, empty submit (when `allowEmpty=false`), or `ref.stopEditing(false)` | Reverting UI, cleanup |
232
+
233
+ ### Optimistic Display
234
+
235
+ When the component is **controlled** and the parent updates `value` asynchronously, the component shows the just-committed value optimistically until the parent's `value` catches up. This prevents a flicker back to the old value between commit and re-render.
236
+
237
+ ### Async Save & Rollback
238
+
239
+ `onSubmit` may return a `Promise`. The component does not block the UI on the promise, but it watches the outcome:
240
+
241
+ - **Promise resolves** — the parent is expected to have updated `value` (or chose not to). Optimistic display clears when `value` next changes.
242
+ - **Promise rejects** — the component treats this as a save failure and **automatically reverts** the optimistic display back to the actual `value` prop. Stale optimistic state never lingers.
243
+
244
+ A typical async-save pattern:
245
+
246
+ ```jsx
247
+ <InlineInput
248
+ value={title}
249
+ onSubmit={async (next) => {
250
+ await saveToServer(next); // throws on failure
251
+ setTitle(next); // only on success
252
+ }}
253
+ />
254
+ ```
255
+
256
+ If `saveToServer` throws, `InlineInput` reverts to `title` automatically. If you want to show a toast on failure, wrap inside `onSubmit` and re-throw to keep the rollback:
257
+
258
+ ```jsx
259
+ <InlineInput
260
+ value={title}
261
+ onSubmit={async (next) => {
262
+ try {
263
+ await saveToServer(next);
264
+ setTitle(next);
265
+ } catch (err) {
266
+ showToast('Save failed');
267
+ throw err;
268
+ }
269
+ }}
270
+ />
271
+ ```
272
+
273
+ If the user starts a new edit before a pending promise settles, the older promise's outcome is ignored (no late rollback can clobber the newer commit).
274
+
275
+ ## Related Components
276
+
277
+ - [TextInput](../fields/TextInput.md) — Full form-aware text input
278
+ - [Tabs](../navigation/Tabs.md) — Uses `InlineInput` internally for editable tab titles
@@ -343,7 +343,7 @@ Add dropdown menus to tabs using the `menu` prop. This replaces the need for man
343
343
 
344
344
  ### Editable Tabs with Menu
345
345
 
346
- Combine editable tabs with a menu for rename, duplicate, and delete actions.
346
+ Combine editable tabs with a menu for rename, duplicate, and delete actions. The inline editing UI is provided by [InlineInput](../content/InlineInput.md), which can also be used standalone elsewhere.
347
347
 
348
348
  ```jsx
349
349
  <Tabs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cube-dev/ui-kit",
3
- "version": "0.136.0",
3
+ "version": "0.137.0",
4
4
  "type": "module",
5
5
  "description": "UIKit for Cube Projects",
6
6
  "repository": {
@@ -1,100 +0,0 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.136.0 | Cube Dev Team */
2
- import { useEvent } from "../../../_internal/hooks/use-event.js";
3
- import { EditableTitleInputElement, HiddenMeasure } from "./styled.js";
4
- import { useLayoutEffect, useRef, useState } from "react";
5
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
- import { useTextField } from "react-aria";
7
-
8
- //#region src/components/navigation/Tabs/EditableTitle.tsx
9
- /**
10
- * Inline editable title component for tab labels.
11
- *
12
- * When not editing, displays the title as a span with double-click to edit.
13
- * When editing, displays an auto-sizing input field.
14
- */
15
- function EditableTitle({ title, isEditing, editValue, onEditValueChange, onStartEditing, onSubmit, onCancel }) {
16
- const inputRef = useRef(null);
17
- const measureRef = useRef(null);
18
- const [inputWidth, setInputWidth] = useState(null);
19
- const justEnteredEditModeRef = useRef(false);
20
- const { inputProps } = useTextField({
21
- "aria-label": "Edit tab title",
22
- value: editValue,
23
- onChange: onEditValueChange
24
- }, inputRef);
25
- useLayoutEffect(() => {
26
- if (isEditing && inputRef.current) {
27
- const input = inputRef.current;
28
- justEnteredEditModeRef.current = true;
29
- input.focus();
30
- requestAnimationFrame(() => {
31
- input.select();
32
- requestAnimationFrame(() => {
33
- requestAnimationFrame(() => {
34
- justEnteredEditModeRef.current = false;
35
- });
36
- });
37
- });
38
- } else justEnteredEditModeRef.current = false;
39
- }, [isEditing]);
40
- useLayoutEffect(() => {
41
- if (isEditing && measureRef.current) {
42
- const width = measureRef.current.scrollWidth;
43
- setInputWidth(width);
44
- }
45
- }, [isEditing, editValue]);
46
- const handleKeyDown = useEvent((e) => {
47
- if (e.key === "Enter") {
48
- e.preventDefault();
49
- onSubmit();
50
- } else if (e.key === "Escape") {
51
- e.preventDefault();
52
- onCancel();
53
- } else if (e.key === "ArrowLeft" || e.key === "ArrowRight" || e.key === " " || e.key === "Delete" || e.key === "Backspace") e.stopPropagation();
54
- });
55
- const handleBlur = useEvent(() => {
56
- if (justEnteredEditModeRef.current) {
57
- requestAnimationFrame(() => {
58
- inputRef.current?.focus();
59
- inputRef.current?.select();
60
- });
61
- return;
62
- }
63
- onSubmit();
64
- });
65
- const handleDoubleClick = useEvent((e) => {
66
- e.preventDefault();
67
- e.stopPropagation();
68
- onStartEditing();
69
- });
70
- if (isEditing) {
71
- const mergedProps = {
72
- ...inputProps,
73
- onKeyDown: (e) => {
74
- handleKeyDown(e);
75
- inputProps.onKeyDown?.(e);
76
- },
77
- onBlur: (e) => {
78
- handleBlur();
79
- inputProps.onBlur?.(e);
80
- }
81
- };
82
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(HiddenMeasure, {
83
- ref: measureRef,
84
- "aria-hidden": "true",
85
- children: editValue || " "
86
- }), /* @__PURE__ */ jsx(EditableTitleInputElement, {
87
- ...mergedProps,
88
- ref: inputRef,
89
- tokens: { "$input-width": inputWidth ? `${inputWidth}px` : "auto" }
90
- })] });
91
- }
92
- return /* @__PURE__ */ jsx("span", {
93
- onDoubleClick: handleDoubleClick,
94
- children: title
95
- });
96
- }
97
-
98
- //#endregion
99
- export { EditableTitle };
100
- //# sourceMappingURL=EditableTitle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditableTitle.js","names":[],"sources":["../../../../src/components/navigation/Tabs/EditableTitle.tsx"],"sourcesContent":["import { useLayoutEffect, useRef, useState } from 'react';\nimport { useTextField } from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport { EditableTitleInputElement, HiddenMeasure } from './styled';\n\nimport type { FocusEvent, KeyboardEvent, MouseEvent, ReactNode } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface EditableTitleProps {\n /** The current title to display (when not editing) */\n title: ReactNode;\n /** Whether the title is currently being edited */\n isEditing: boolean;\n /** Current edit input value */\n editValue: string;\n /** Callback when edit value changes */\n onEditValueChange: (value: string) => void;\n /** Callback to start editing (e.g., on double-click) */\n onStartEditing: () => void;\n /** Callback when editing is submitted (Enter or blur) */\n onSubmit: () => void;\n /** Callback when editing is cancelled (Escape) */\n onCancel: () => void;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Inline editable title component for tab labels.\n *\n * When not editing, displays the title as a span with double-click to edit.\n * When editing, displays an auto-sizing input field.\n */\nexport function EditableTitle({\n title,\n isEditing,\n editValue,\n onEditValueChange,\n onStartEditing,\n onSubmit,\n onCancel,\n}: EditableTitleProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const measureRef = useRef<HTMLSpanElement>(null);\n const [inputWidth, setInputWidth] = useState<number | null>(null);\n const justEnteredEditModeRef = useRef(false);\n\n // React Aria text field hook\n const { inputProps } = useTextField(\n {\n 'aria-label': 'Edit tab title',\n value: editValue,\n onChange: onEditValueChange,\n },\n inputRef,\n );\n\n // Focus and select input when entering edit mode\n useLayoutEffect(() => {\n if (isEditing && inputRef.current) {\n const input = inputRef.current;\n\n // Set flag to ignore immediate blur events\n justEnteredEditModeRef.current = true;\n\n input.focus();\n // Use requestAnimationFrame to ensure selection happens after focus\n requestAnimationFrame(() => {\n input.select();\n // Clear the flag after focus is established (allow 2 frames for menu to fully close)\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n justEnteredEditModeRef.current = false;\n });\n });\n });\n } else {\n justEnteredEditModeRef.current = false;\n }\n }, [isEditing]);\n\n // Measure text width and update input width\n useLayoutEffect(() => {\n if (isEditing && measureRef.current) {\n const width = measureRef.current.scrollWidth;\n setInputWidth(width);\n }\n }, [isEditing, editValue]);\n\n const handleKeyDown = useEvent((e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onSubmit();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n onCancel();\n } else if (\n e.key === 'ArrowLeft' ||\n e.key === 'ArrowRight' ||\n e.key === ' ' ||\n e.key === 'Delete' ||\n e.key === 'Backspace'\n ) {\n // Stop propagation to prevent tab navigation/deletion while editing\n e.stopPropagation();\n }\n });\n\n const handleBlur = useEvent(() => {\n // Ignore blur events immediately after entering edit mode (menu closing causes focus loss)\n if (justEnteredEditModeRef.current) {\n // Re-focus the input since something else stole focus\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n inputRef.current?.select();\n });\n return;\n }\n // Submit on blur\n onSubmit();\n });\n\n const handleDoubleClick = useEvent((e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onStartEditing();\n });\n\n if (isEditing) {\n // Merge our handlers with React Aria's inputProps\n const mergedProps = {\n ...inputProps,\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n handleKeyDown(e);\n inputProps.onKeyDown?.(e);\n },\n onBlur: (e: FocusEvent<HTMLInputElement>) => {\n handleBlur();\n inputProps.onBlur?.(e);\n },\n };\n\n return (\n <>\n <HiddenMeasure ref={measureRef} aria-hidden=\"true\">\n {editValue || ' '}\n </HiddenMeasure>\n <EditableTitleInputElement\n {...mergedProps}\n ref={inputRef}\n tokens={{ '$input-width': inputWidth ? `${inputWidth}px` : 'auto' }}\n />\n </>\n );\n }\n\n return <span onDoubleClick={handleDoubleClick}>{title}</span>;\n}\n"],"mappings":";;;;;;;;;;;;;;AAwCA,SAAgB,cAAc,EAC5B,OACA,WACA,WACA,mBACA,gBACA,UACA,YACqB;CACrB,MAAM,WAAW,OAAyB,KAAK;CAC/C,MAAM,aAAa,OAAwB,KAAK;CAChD,MAAM,CAAC,YAAY,iBAAiB,SAAwB,KAAK;CACjE,MAAM,yBAAyB,OAAO,MAAM;CAG5C,MAAM,EAAE,eAAe,aACrB;EACE,cAAc;EACd,OAAO;EACP,UAAU;EACX,EACD,SACD;AAGD,uBAAsB;AACpB,MAAI,aAAa,SAAS,SAAS;GACjC,MAAM,QAAQ,SAAS;AAGvB,0BAAuB,UAAU;AAEjC,SAAM,OAAO;AAEb,+BAA4B;AAC1B,UAAM,QAAQ;AAEd,gCAA4B;AAC1B,iCAA4B;AAC1B,6BAAuB,UAAU;OACjC;MACF;KACF;QAEF,wBAAuB,UAAU;IAElC,CAAC,UAAU,CAAC;AAGf,uBAAsB;AACpB,MAAI,aAAa,WAAW,SAAS;GACnC,MAAM,QAAQ,WAAW,QAAQ;AACjC,iBAAc,MAAM;;IAErB,CAAC,WAAW,UAAU,CAAC;CAE1B,MAAM,gBAAgB,UAAU,MAAqB;AACnD,MAAI,EAAE,QAAQ,SAAS;AACrB,KAAE,gBAAgB;AAClB,aAAU;aACD,EAAE,QAAQ,UAAU;AAC7B,KAAE,gBAAgB;AAClB,aAAU;aAEV,EAAE,QAAQ,eACV,EAAE,QAAQ,gBACV,EAAE,QAAQ,OACV,EAAE,QAAQ,YACV,EAAE,QAAQ,YAGV,GAAE,iBAAiB;GAErB;CAEF,MAAM,aAAa,eAAe;AAEhC,MAAI,uBAAuB,SAAS;AAElC,+BAA4B;AAC1B,aAAS,SAAS,OAAO;AACzB,aAAS,SAAS,QAAQ;KAC1B;AACF;;AAGF,YAAU;GACV;CAEF,MAAM,oBAAoB,UAAU,MAAkB;AACpD,IAAE,gBAAgB;AAClB,IAAE,iBAAiB;AACnB,kBAAgB;GAChB;AAEF,KAAI,WAAW;EAEb,MAAM,cAAc;GAClB,GAAG;GACH,YAAY,MAAuC;AACjD,kBAAc,EAAE;AAChB,eAAW,YAAY,EAAE;;GAE3B,SAAS,MAAoC;AAC3C,gBAAY;AACZ,eAAW,SAAS,EAAE;;GAEzB;AAED,SACE,8CACE,oBAAC;GAAc,KAAK;GAAY,eAAY;aACzC,aAAa;IACA,EAChB,oBAAC;GACC,GAAI;GACJ,KAAK;GACL,QAAQ,EAAE,gBAAgB,aAAa,GAAG,WAAW,MAAM,QAAQ;IACnE,IACD;;AAIP,QAAO,oBAAC;EAAK,eAAe;YAAoB;GAAa"}