frappe-ui 1.0.0-beta.2 → 1.0.0-beta.21

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 (692) hide show
  1. package/experimental/FloatingWindow/FloatingWindow.cy.ts +328 -0
  2. package/experimental/FloatingWindow/FloatingWindow.vue +303 -0
  3. package/experimental/FloatingWindow/index.ts +8 -0
  4. package/experimental/FloatingWindow/types.ts +31 -0
  5. package/experimental/FloatingWindow/useFloatingWindow.ts +236 -0
  6. package/experimental/MultiEmailInput/MultiEmailInput.cy.ts +155 -0
  7. package/experimental/MultiEmailInput/MultiEmailInput.vue +472 -0
  8. package/experimental/MultiEmailInput/index.ts +17 -0
  9. package/experimental/MultiEmailInput/stories/AsyncSuggestions.vue +54 -0
  10. package/experimental/MultiEmailInput/stories/Basic.vue +18 -0
  11. package/experimental/MultiEmailInput/stories/CustomChip.vue +39 -0
  12. package/experimental/MultiEmailInput/stories/Labeling.vue +28 -0
  13. package/experimental/MultiEmailInput/types.ts +138 -0
  14. package/experimental/MultiEmailInput/utils.ts +60 -0
  15. package/experimental.ts +12 -0
  16. package/frappe/Billing/SignupBanner.vue +1 -1
  17. package/frappe/Billing/TrialBanner.vue +1 -1
  18. package/frappe/DataImport/DataImport.vue +1 -1
  19. package/frappe/DataImport/DataImportList.vue +1 -1
  20. package/frappe/DataImport/ImportSteps.vue +6 -6
  21. package/frappe/DataImport/MappingStep.vue +1 -1
  22. package/frappe/DataImport/PreviewStep.vue +9 -9
  23. package/frappe/DataImport/TemplateModal.vue +1 -1
  24. package/frappe/DataImport/UploadStep.vue +5 -5
  25. package/frappe/Filter/Filter.vue +1 -1
  26. package/frappe/Help/HelpModal.vue +1 -1
  27. package/frappe/Link/stories/Suffix.vue +2 -2
  28. package/frappe/Onboarding/GettingStartedBanner.vue +1 -1
  29. package/frappe/drive/components/AppSwitcher.vue +1 -1
  30. package/frappe/drive/components/InfoDialog.vue +3 -3
  31. package/frappe/drive/components/MoveDialog.vue +2 -2
  32. package/frappe/drive/components/Select/Select.vue +2 -2
  33. package/frappe/drive/components/ShareDialog.vue +1 -1
  34. package/frappe/telemetry/index.ts +88 -14
  35. package/frappe/telemetry/pulse.ts +78 -164
  36. package/frappe/telemetry/telemetry.test.ts +13 -79
  37. package/icons/IconPicker.vue +1 -1
  38. package/package.json +104 -34
  39. package/src/components/Alert/Alert.md +4 -0
  40. package/src/components/Alert/Alert.vue +4 -4
  41. package/src/components/Autocomplete/Autocomplete.vue +6 -6
  42. package/src/components/Avatar/Avatar.md +4 -0
  43. package/src/components/Avatar/Avatar.vue +23 -4
  44. package/src/components/Badge/Badge.api.md +1 -1
  45. package/src/components/Badge/Badge.cy.ts +34 -16
  46. package/src/components/Badge/Badge.md +20 -4
  47. package/src/components/Badge/Badge.vue +60 -45
  48. package/src/components/Badge/stories/CallMeta.vue +35 -0
  49. package/src/components/Badge/stories/EventStatus.vue +16 -0
  50. package/src/components/Badge/stories/ListStatus.vue +91 -0
  51. package/src/components/Badge/stories/Reactions.vue +33 -0
  52. package/src/components/Badge/stories/RowTags.vue +39 -0
  53. package/src/components/Badge/types.ts +1 -2
  54. package/src/components/BottomSheet/BottomSheet.api.md +57 -0
  55. package/src/components/BottomSheet/BottomSheet.vue +232 -0
  56. package/src/components/BottomSheet/index.ts +6 -0
  57. package/src/components/BottomSheet/types.ts +23 -0
  58. package/src/components/Breadcrumbs/Breadcrumbs.md +4 -0
  59. package/src/components/Breadcrumbs/Breadcrumbs.vue +3 -3
  60. package/src/components/Button/Button.api.md +37 -32
  61. package/src/components/Button/Button.cy.ts +18 -2
  62. package/src/components/Button/Button.md +20 -8
  63. package/src/components/Button/Button.vue +304 -284
  64. package/src/components/Button/stories/InlineActions.vue +10 -0
  65. package/src/components/Button/stories/LiveClassCard.vue +34 -0
  66. package/src/components/Button/stories/SectionAction.vue +17 -0
  67. package/src/components/Button/stories/SectionControls.vue +28 -0
  68. package/src/components/Button/stories/SelectionToolbar.vue +20 -0
  69. package/src/components/Button/stories/StackedActions.vue +10 -0
  70. package/src/components/Button/types.ts +38 -32
  71. package/src/components/Calendar/Calendar.api.md +16 -16
  72. package/src/components/Calendar/Calendar.vue +100 -73
  73. package/src/components/Calendar/CalendarDaily.vue +21 -20
  74. package/src/components/Calendar/CalendarMonthEvent.vue +30 -9
  75. package/src/components/Calendar/CalendarMonthly.vue +60 -39
  76. package/src/components/Calendar/CalendarTimeMarker.vue +9 -8
  77. package/src/components/Calendar/CalendarWeekDayEvent.vue +98 -42
  78. package/src/components/Calendar/CalendarWeekly.vue +77 -41
  79. package/src/components/Calendar/EventModalContent.vue +32 -16
  80. package/src/components/Calendar/NewEventModal.vue +19 -16
  81. package/src/components/Calendar/ShowMoreCalendarEvent.vue +11 -17
  82. package/src/components/Calendar/{calendarUtils.js → calendarUtils.ts} +76 -52
  83. package/src/components/Calendar/composables/{useCalendarData.js → useCalendarData.ts} +23 -11
  84. package/src/components/Calendar/composables/{useEventModal.js → useEventModal.ts} +16 -12
  85. package/src/components/Calendar/index.ts +12 -2
  86. package/src/components/Calendar/stories/CustomHeader.vue +1 -1
  87. package/src/components/Calendar/types.ts +106 -0
  88. package/src/components/Calendar/{useEventBase.js → useEventBase.ts} +40 -26
  89. package/src/components/Card.vue +2 -2
  90. package/src/components/Charts/ECharts.vue +1 -1
  91. package/src/components/Charts/NumberChart.vue +7 -7
  92. package/src/components/Charts/eChartOptions.ts +28 -13
  93. package/src/components/Checkbox/Checkbox.api.md +6 -0
  94. package/src/components/Checkbox/Checkbox.cy.ts +10 -2
  95. package/src/components/Checkbox/Checkbox.md +28 -0
  96. package/src/components/Checkbox/Checkbox.vue +9 -22
  97. package/src/components/Checkbox/stories/Group.vue +27 -0
  98. package/src/components/Checkbox/stories/HorizontalGroup.vue +24 -0
  99. package/src/components/Checkbox/stories/SettingRow.vue +23 -0
  100. package/src/components/Checkbox/stories/WithDescription.vue +27 -0
  101. package/src/components/Checkbox/types.ts +7 -0
  102. package/src/components/CodeEditor/CodeEditor.api.md +139 -0
  103. package/src/components/CodeEditor/CodeEditor.cy.ts +160 -0
  104. package/src/components/CodeEditor/CodeEditor.md +104 -0
  105. package/src/components/CodeEditor/CodeEditor.vue +556 -0
  106. package/src/components/CodeEditor/CodePreview.test.ts +49 -0
  107. package/src/components/CodeEditor/CodePreview.vue +45 -0
  108. package/src/components/CodeEditor/index.ts +17 -0
  109. package/src/components/CodeEditor/languages.ts +63 -0
  110. package/src/components/CodeEditor/stories/Default.vue +16 -0
  111. package/src/components/CodeEditor/stories/Labeling.vue +25 -0
  112. package/src/components/CodeEditor/stories/MaxHeight.vue +24 -0
  113. package/src/components/CodeEditor/stories/Preview.vue +36 -0
  114. package/src/components/CodeEditor/stories/Sizes.vue +15 -0
  115. package/src/components/CodeEditor/stories/Variants.vue +13 -0
  116. package/src/components/CodeEditor/theme.ts +272 -0
  117. package/src/components/CodeEditor/types.ts +69 -0
  118. package/src/components/Combobox/Combobox.api.md +19 -20
  119. package/src/components/Combobox/Combobox.cy.ts +54 -14
  120. package/src/components/Combobox/Combobox.md +4 -0
  121. package/src/components/Combobox/Combobox.vue +233 -247
  122. package/src/components/Combobox/ComboboxResults.vue +1 -1
  123. package/src/components/Combobox/stories/Clearable.vue +2 -2
  124. package/src/components/Combobox/stories/CreateNew.vue +1 -1
  125. package/src/components/Combobox/stories/Footer.vue +10 -2
  126. package/src/components/Combobox/stories/InDialog.vue +1 -1
  127. package/src/components/Combobox/types.ts +8 -29
  128. package/src/components/CommandPalette/CommandPaletteItem.vue +1 -1
  129. package/src/components/ContextMenu/ContextMenu.api.md +52 -0
  130. package/src/components/ContextMenu/ContextMenu.cy.ts +191 -0
  131. package/src/components/ContextMenu/ContextMenu.md +25 -0
  132. package/src/components/ContextMenu/ContextMenu.vue +106 -0
  133. package/src/components/ContextMenu/index.ts +2 -0
  134. package/src/components/ContextMenu/stories/FileList.vue +105 -0
  135. package/src/components/ContextMenu/stories/Groups.vue +95 -0
  136. package/src/components/ContextMenu/stories/Simple.vue +72 -0
  137. package/src/components/ContextMenu/types.ts +39 -0
  138. package/src/components/DatePicker/CalendarPanel.vue +128 -86
  139. package/src/components/DatePicker/DatePicker.vue +3 -9
  140. package/src/components/DatePicker/DateRangePicker.vue +4 -8
  141. package/src/components/DatePicker/DateTimePicker.cy.ts +4 -2
  142. package/src/components/DatePicker/DateTimePicker.vue +3 -9
  143. package/src/components/DatePicker/composables.ts +15 -37
  144. package/src/components/DatePicker/stories/Range.vue +1 -1
  145. package/src/components/DatePicker/types.ts +1 -1
  146. package/src/components/DesktopShell/DesktopShell.api.md +40 -0
  147. package/src/components/DesktopShell/DesktopShell.cy.ts +39 -0
  148. package/src/components/DesktopShell/DesktopShell.md +31 -0
  149. package/src/components/DesktopShell/DesktopShell.vue +81 -0
  150. package/src/components/DesktopShell/index.ts +3 -0
  151. package/src/components/DesktopShell/stories/Default.vue +97 -0
  152. package/src/components/DesktopShell/types.ts +2 -0
  153. package/src/components/Dialog/Dialog.api.md +7 -8
  154. package/src/components/Dialog/Dialog.md +4 -0
  155. package/src/components/Dialog/Dialog.vue +8 -7
  156. package/src/components/Dialog/stories/CommandPalette.vue +1 -1
  157. package/src/components/Dialog/stories/Wizard.vue +1 -1
  158. package/src/components/Dialogs.vue +11 -9
  159. package/src/components/Divider/Divider.api.md +1 -1
  160. package/src/components/Divider/Divider.md +4 -0
  161. package/src/components/Dropdown/Dropdown.api.md +10 -35
  162. package/src/components/Dropdown/Dropdown.md +10 -6
  163. package/src/components/Dropdown/Dropdown.vue +33 -47
  164. package/src/components/Dropdown/stories/{05_KebabMenu.vue → KebabMenu.vue} +3 -1
  165. package/src/components/Dropdown/stories/{06_UserMenu.vue → UserMenu.vue} +1 -1
  166. package/src/components/Dropdown/types.ts +25 -189
  167. package/src/components/Duration/Duration.api.md +92 -0
  168. package/src/components/Duration/Duration.cy.ts +183 -0
  169. package/src/components/Duration/Duration.md +98 -0
  170. package/src/components/Duration/Duration.vue +114 -0
  171. package/src/components/Duration/duration.ts +185 -0
  172. package/src/components/Duration/index.ts +8 -0
  173. package/src/components/Duration/stories/Default.vue +10 -0
  174. package/src/components/Duration/stories/Formats.vue +16 -0
  175. package/src/components/Duration/stories/RealWorld.vue +50 -0
  176. package/src/components/Duration/stories/Sizes.vue +15 -0
  177. package/src/components/Duration/stories/States.vue +21 -0
  178. package/src/components/Duration/types.ts +52 -0
  179. package/src/components/ErrorMessage/ErrorMessage.cy.ts +1 -1
  180. package/src/components/ErrorMessage/ErrorMessage.md +4 -0
  181. package/src/components/ErrorMessage/ErrorMessage.vue +1 -1
  182. package/src/components/FileUploader/FileUploader.api.md +36 -11
  183. package/src/components/FileUploader/FileUploader.cy.ts +66 -0
  184. package/src/components/FileUploader/FileUploader.md +4 -1
  185. package/src/components/FileUploader/FileUploader.vue +147 -106
  186. package/src/components/FileUploader/index.ts +6 -0
  187. package/src/components/FileUploader/types.ts +43 -0
  188. package/src/components/FormControl/FormControl.api.md +3 -4
  189. package/src/components/FormControl/FormControl.md +4 -0
  190. package/src/components/FormControl/stories/RealForm.vue +3 -3
  191. package/src/components/FormLabel.vue +5 -8
  192. package/src/components/HoverCard/HoverCard.api.md +100 -0
  193. package/src/components/HoverCard/HoverCard.cy.ts +103 -0
  194. package/src/components/HoverCard/HoverCard.md +52 -0
  195. package/src/components/HoverCard/HoverCard.vue +91 -0
  196. package/src/components/HoverCard/index.ts +2 -0
  197. package/src/components/HoverCard/stories/Arrow.vue +28 -0
  198. package/src/components/HoverCard/stories/Delays.vue +16 -0
  199. package/src/components/HoverCard/stories/Example.vue +28 -0
  200. package/src/components/HoverCard/types.ts +47 -0
  201. package/src/components/Icon/Icon.cy.ts +78 -0
  202. package/src/components/Icon/Icon.vue +50 -0
  203. package/src/components/Icon/index.ts +1 -0
  204. package/src/components/InputLabeling/InputDescription.vue +1 -1
  205. package/src/components/InputLabeling/InputError.vue +1 -1
  206. package/src/components/InputLabeling/InputLabel.vue +21 -7
  207. package/src/components/InputLabeling/RequiredIndicator.vue +1 -1
  208. package/src/components/ItemListRow/ItemListRow.vue +1 -1
  209. package/src/components/ItemListRow/stories/RowStates.vue +1 -1
  210. package/src/components/KeyboardShortcut.vue +4 -8
  211. package/src/components/KeyboardShortcutsModal/KeyboardShortcutsModal.api.md +22 -14
  212. package/src/components/KeyboardShortcutsModal/KeyboardShortcutsModal.vue +2 -2
  213. package/src/components/ListFilter/ListFilter.api.md +5 -6
  214. package/src/components/ListFilter/ListFilter.vue +161 -57
  215. package/src/components/ListFilter/NestedPopover.vue +17 -10
  216. package/src/components/ListFilter/SearchComplete.vue +31 -38
  217. package/src/components/ListItem.vue +1 -1
  218. package/src/components/ListView/ListEmptyState.vue +1 -1
  219. package/src/components/ListView/ListGroupHeader.vue +2 -2
  220. package/src/components/ListView/ListRow.vue +1 -1
  221. package/src/components/ListView/ListSelectBanner.vue +1 -1
  222. package/src/components/ListView/ListView.api.md +322 -6
  223. package/src/components/ListView/index.ts +25 -0
  224. package/src/components/ListView/stories/CustomList.vue +1 -1
  225. package/src/components/ListView/stories/GroupedRows.vue +1 -1
  226. package/src/components/LoadingIndicator.vue +13 -22
  227. package/src/components/LoadingText.vue +3 -13
  228. package/src/components/{Dropdown/DropdownMenuList.vue → Menu/Menu.vue} +110 -75
  229. package/src/components/{Dropdown/DropdownMenuItemContent.vue → Menu/MenuItemContent.vue} +23 -33
  230. package/src/components/{Dropdown/DropdownRenderContent.vue → Menu/MenuRenderContent.vue} +1 -1
  231. package/src/components/Menu/types.ts +225 -0
  232. package/src/components/{Dropdown → Menu}/utils.ts +36 -40
  233. package/src/components/MobileNav/MobileNav.api.md +70 -0
  234. package/src/components/MobileNav/MobileNav.cy.ts +89 -0
  235. package/src/components/MobileNav/MobileNav.md +34 -0
  236. package/src/components/MobileNav/MobileNav.vue +15 -0
  237. package/src/components/MobileNav/MobileNavItem.vue +125 -0
  238. package/src/components/MobileNav/index.ts +4 -0
  239. package/src/components/MobileNav/stories/Default.vue +40 -0
  240. package/src/components/MobileNav/types.ts +33 -0
  241. package/src/components/MobileShell/MobileShell.api.md +23 -0
  242. package/src/components/MobileShell/MobileShell.cy.ts +25 -0
  243. package/src/components/MobileShell/MobileShell.md +24 -0
  244. package/src/components/MobileShell/MobileShell.vue +41 -0
  245. package/src/components/MobileShell/index.ts +3 -0
  246. package/src/components/MobileShell/stories/Default.vue +75 -0
  247. package/src/components/MobileShell/types.ts +7 -0
  248. package/src/components/MonthPicker/MonthPicker.cy.ts +16 -0
  249. package/src/components/MonthPicker/MonthPicker.vue +19 -8
  250. package/src/components/MultiSelect/MultiSelect.api.md +3 -4
  251. package/src/components/MultiSelect/MultiSelect.md +42 -10
  252. package/src/components/MultiSelect/MultiSelect.vue +199 -227
  253. package/src/components/MultiSelect/MultiSelectResults.vue +1 -1
  254. package/src/components/MultiSelect/stories/Members.vue +1 -1
  255. package/src/components/MultiSelect/stories/TagsTrigger.vue +3 -3
  256. package/src/components/MultiSelect/types.ts +3 -3
  257. package/src/components/PageHeader/PageHeader.api.md +112 -0
  258. package/src/components/PageHeader/PageHeader.cy.ts +68 -0
  259. package/src/components/PageHeader/PageHeader.md +25 -0
  260. package/src/components/PageHeader/PageHeader.vue +13 -0
  261. package/src/components/PageHeader/PageHeaderBackButton.vue +29 -0
  262. package/src/components/PageHeader/PageHeaderBase.vue +51 -0
  263. package/src/components/PageHeader/PageHeaderMobile.vue +68 -0
  264. package/src/components/PageHeader/PageHeaderMobileTitle.vue +16 -0
  265. package/src/components/PageHeader/PageHeaderTarget.vue +13 -0
  266. package/src/components/PageHeader/PageHeaderTitle.vue +12 -0
  267. package/src/components/PageHeader/index.ts +7 -0
  268. package/src/components/PageHeader/stories/Default.vue +19 -0
  269. package/src/components/PageHeader/stories/Mobile.vue +24 -0
  270. package/src/components/PageHeader/target.ts +19 -0
  271. package/src/components/PageHeader/types.ts +19 -0
  272. package/src/components/Password/Password.md +4 -0
  273. package/src/components/Password/Password.vue +2 -2
  274. package/src/components/Popover/Popover.api.md +126 -42
  275. package/src/components/Popover/Popover.cy.ts +425 -41
  276. package/src/components/Popover/Popover.md +99 -4
  277. package/src/components/Popover/Popover.vue +288 -215
  278. package/src/components/Popover/index.ts +8 -1
  279. package/src/components/Popover/stories/Arrow.vue +16 -0
  280. package/src/components/Popover/stories/Bare.vue +20 -0
  281. package/src/components/Popover/stories/Click.vue +7 -4
  282. package/src/components/Popover/stories/Controlled.vue +22 -0
  283. package/src/components/Popover/stories/Dismissible.vue +19 -0
  284. package/src/components/Popover/stories/MatchTriggerWidth.vue +16 -0
  285. package/src/components/Popover/stories/SideAlign.vue +17 -0
  286. package/src/components/Popover/types.ts +101 -23
  287. package/src/components/Progress/Progress.cy.ts +2 -2
  288. package/src/components/Progress/Progress.md +4 -0
  289. package/src/components/Progress/Progress.vue +4 -4
  290. package/src/components/Rail/Rail.api.md +91 -0
  291. package/src/components/Rail/Rail.cy.ts +84 -0
  292. package/src/components/Rail/Rail.md +30 -0
  293. package/src/components/Rail/Rail.vue +16 -0
  294. package/src/components/Rail/RailItem.vue +134 -0
  295. package/src/components/Rail/RailItemBadge.vue +64 -0
  296. package/src/components/Rail/index.ts +2 -0
  297. package/src/components/Rail/stories/Default.vue +44 -0
  298. package/src/components/Rail/types.ts +37 -0
  299. package/src/components/Rating/Rating.md +4 -0
  300. package/src/components/Rating/Rating.vue +5 -8
  301. package/src/components/Rating/stories/CustomSlot.vue +2 -2
  302. package/src/components/ScrollArea/ScrollArea.api.md +59 -0
  303. package/src/components/ScrollArea/ScrollArea.vue +46 -0
  304. package/src/components/ScrollArea/ScrollBar.vue +101 -0
  305. package/src/components/ScrollArea/index.ts +2 -0
  306. package/src/components/Select/Select.cy.ts +16 -15
  307. package/src/components/Select/Select.md +4 -0
  308. package/src/components/Select/Select.vue +217 -203
  309. package/src/components/Select/stories/Example.vue +4 -3
  310. package/src/components/Select/stories/States.vue +1 -1
  311. package/src/components/Select/stories/TriggerSlots.vue +2 -2
  312. package/src/components/Select/utils.ts +4 -3
  313. package/src/components/SettingsDialog/SettingsBody.vue +23 -0
  314. package/src/components/SettingsDialog/SettingsContent.vue +7 -0
  315. package/src/components/SettingsDialog/SettingsDialog.api.md +273 -0
  316. package/src/components/SettingsDialog/SettingsDialog.cy.ts +126 -0
  317. package/src/components/SettingsDialog/SettingsDialog.md +43 -0
  318. package/src/components/SettingsDialog/SettingsDialog.vue +76 -0
  319. package/src/components/SettingsDialog/SettingsHeader.vue +36 -0
  320. package/src/components/SettingsDialog/SettingsNavGroup.vue +20 -0
  321. package/src/components/SettingsDialog/SettingsNavItem.vue +33 -0
  322. package/src/components/SettingsDialog/SettingsPanel.cy.ts +77 -0
  323. package/src/components/SettingsDialog/SettingsPanel.vue +26 -0
  324. package/src/components/SettingsDialog/SettingsRow.vue +52 -0
  325. package/src/components/SettingsDialog/SettingsSidebar.vue +16 -0
  326. package/src/components/SettingsDialog/index.ts +10 -0
  327. package/src/components/SettingsDialog/stories/Default.vue +99 -0
  328. package/src/components/SettingsDialog/stories/PanelBasic.vue +52 -0
  329. package/src/components/SettingsDialog/stories/panels/NotificationsPanel.vue +57 -0
  330. package/src/components/SettingsDialog/stories/panels/PreferencesPanel.vue +57 -0
  331. package/src/components/SettingsDialog/stories/panels/ProfilePanel.vue +38 -0
  332. package/src/components/SettingsDialog/stories/panels/UsersPanel.vue +83 -0
  333. package/src/components/SettingsDialog/types.ts +21 -0
  334. package/src/components/Sidebar/Sidebar.api.md +124 -65
  335. package/src/components/Sidebar/Sidebar.cy.ts +127 -76
  336. package/src/components/Sidebar/Sidebar.md +47 -3
  337. package/src/components/Sidebar/Sidebar.vue +64 -56
  338. package/src/components/Sidebar/SidebarCollapseToggle.vue +23 -0
  339. package/src/components/Sidebar/SidebarHeader.vue +76 -52
  340. package/src/components/Sidebar/SidebarItem.vue +159 -95
  341. package/src/components/Sidebar/SidebarItemIcon.vue +25 -0
  342. package/src/components/Sidebar/SidebarLabel.vue +34 -0
  343. package/src/components/Sidebar/SidebarSection.vue +29 -14
  344. package/src/components/Sidebar/index.ts +13 -2
  345. package/src/components/Sidebar/stories/Collapsed.vue +40 -0
  346. package/src/components/Sidebar/stories/Default.vue +153 -0
  347. package/src/components/Sidebar/stories/Legacy.vue +36 -0
  348. package/src/components/Sidebar/types.ts +105 -20
  349. package/src/components/Skeleton/Skeleton.cy.ts +21 -0
  350. package/src/components/Skeleton/Skeleton.md +21 -0
  351. package/src/components/Skeleton/Skeleton.vue +6 -0
  352. package/src/components/Skeleton/index.ts +1 -0
  353. package/src/components/Skeleton/stories/Card.vue +12 -0
  354. package/src/components/Skeleton/stories/List.vue +15 -0
  355. package/src/components/Skeleton/stories/Text.vue +11 -0
  356. package/src/components/Slider/Slider.api.md +1 -1
  357. package/src/components/Slider/Slider.cy.ts +29 -0
  358. package/src/components/Slider/Slider.md +10 -0
  359. package/src/components/Slider/Slider.vue +37 -9
  360. package/src/components/Slider/stories/NegativeValues.vue +12 -0
  361. package/src/components/Slider/types.ts +1 -1
  362. package/src/components/Spinner/Spinner.api.md +32 -0
  363. package/src/components/Spinner/Spinner.cy.ts +87 -0
  364. package/src/components/Spinner/Spinner.md +21 -0
  365. package/src/components/Spinner/Spinner.vue +168 -0
  366. package/src/components/Spinner/index.ts +2 -0
  367. package/src/components/Spinner/stories/InContext.vue +49 -0
  368. package/src/components/Spinner/stories/Sizes.vue +12 -0
  369. package/src/components/Spinner/stories/Themes.vue +10 -0
  370. package/src/components/Spinner/stories/Track.vue +12 -0
  371. package/src/components/Spinner/types.ts +14 -0
  372. package/src/components/Switch/Switch.md +4 -0
  373. package/src/components/Switch/Switch.vue +6 -23
  374. package/src/components/TabButtons/Pill.vue +161 -0
  375. package/src/components/TabButtons/TabButtons.api.md +52 -2
  376. package/src/components/TabButtons/TabButtons.cy.ts +18 -5
  377. package/src/components/TabButtons/TabButtons.md +49 -0
  378. package/src/components/TabButtons/TabButtons.vue +207 -109
  379. package/src/components/TabButtons/index.ts +11 -1
  380. package/src/components/TabButtons/pillTypes.ts +43 -0
  381. package/src/components/TabButtons/stories/PrefixSuffix.vue +65 -0
  382. package/src/components/TabButtons/stories/Sizes.vue +26 -0
  383. package/src/components/TabButtons/stories/Variants.vue +40 -0
  384. package/src/components/TabButtons/stories/Vertical.vue +64 -0
  385. package/src/components/TabButtons/types.ts +49 -0
  386. package/src/components/Tabs/Tabs.md +4 -0
  387. package/src/components/Tabs/Tabs.vue +1 -1
  388. package/src/components/TextEditor/TextEditor.cy.ts +1 -1
  389. package/src/components/TextEditor/TextEditor.md +3 -0
  390. package/src/components/TextEditor/TextEditor.vue +7 -4
  391. package/src/components/TextEditor/components/CodeBlockComponent.vue +4 -194
  392. package/src/components/TextEditor/components/FontColor.vue +1 -1
  393. package/src/components/TextEditor/components/LinkPopup.vue +1 -1
  394. package/src/components/TextEditor/components/MediaNodeView.vue +17 -17
  395. package/src/components/TextEditor/components/MentionList.vue +1 -1
  396. package/src/components/TextEditor/components/TextEditorBubbleMenu.vue +14 -5
  397. package/src/components/TextEditor/components/TextEditorFixedMenu.vue +3 -3
  398. package/src/components/TextEditor/components/{Menu.vue → TextEditorMenu.vue} +3 -3
  399. package/src/components/TextEditor/extensions/iframe/InsertIframe.vue +2 -2
  400. package/src/components/TextEditor/extensions/iframe/iframe-extension.ts +62 -19
  401. package/src/components/TextEditor/extensions/image-group/ImageGroupNodeView.vue +1 -1
  402. package/src/components/TextEditor/extensions/image-group/ImageGroupUploadDialog.vue +4 -4
  403. package/src/components/TextEditor/extensions/suggestion/SuggestionList.vue +1 -1
  404. package/src/components/TextEditor/extensions/toc-node/TocNodeView.vue +1 -1
  405. package/src/components/TextEditor/hljs-github.css +197 -0
  406. package/src/components/TextEditor/index.ts +13 -0
  407. package/src/components/TextInput/TextInput.cy.ts +8 -3
  408. package/src/components/TextInput/TextInput.md +4 -0
  409. package/src/components/TextInput/TextInput.vue +11 -15
  410. package/src/components/TextInput/stories/Slots.vue +1 -1
  411. package/src/components/Textarea/Textarea.cy.ts +1 -1
  412. package/src/components/Textarea/Textarea.md +4 -0
  413. package/src/components/Textarea/Textarea.vue +11 -15
  414. package/src/components/ThemeSwitcher/ThemePreview.vue +74 -0
  415. package/src/components/ThemeSwitcher/ThemeSwitcher.api.md +82 -0
  416. package/src/components/ThemeSwitcher/ThemeSwitcher.cy.ts +101 -0
  417. package/src/components/ThemeSwitcher/ThemeSwitcher.md +70 -0
  418. package/src/components/ThemeSwitcher/ThemeSwitcher.vue +145 -0
  419. package/src/components/ThemeSwitcher/index.ts +2 -0
  420. package/src/components/ThemeSwitcher/previews/PreviewWindow.vue +74 -0
  421. package/src/components/ThemeSwitcher/stories/Branded.vue +12 -0
  422. package/src/components/ThemeSwitcher/stories/Default.vue +7 -0
  423. package/src/components/ThemeSwitcher/stories/Menu.vue +53 -0
  424. package/src/components/ThemeSwitcher/stories/Toggle.vue +25 -0
  425. package/src/components/ThemeSwitcher/types.ts +35 -0
  426. package/src/components/TimePicker/TimePicker.api.md +67 -15
  427. package/src/components/TimePicker/TimePicker.cy.ts +130 -14
  428. package/src/components/TimePicker/TimePicker.md +6 -0
  429. package/src/components/TimePicker/TimePicker.vue +74 -19
  430. package/src/components/TimePicker/stories/Labeling.vue +21 -0
  431. package/src/components/TimePicker/stories/Range.vue +1 -1
  432. package/src/components/TimePicker/stories/SizesAndVariants.vue +23 -0
  433. package/src/components/TimePicker/stories/TwentyFour.vue +1 -1
  434. package/src/components/TimePicker/types.ts +15 -3
  435. package/src/components/TimePicker/utils.ts +82 -21
  436. package/src/components/Toast/Toast.md +1 -1
  437. package/src/components/Toast/Toast.sanitize.test.ts +50 -0
  438. package/src/components/Toast/Toast.test.ts +5 -0
  439. package/src/components/Toast/Toast.vue +7 -7
  440. package/src/components/Toast/ToastProvider.vue +18 -9
  441. package/src/components/Toast/stories/CustomIcon.vue +1 -1
  442. package/src/components/Toast/toast.ts +32 -8
  443. package/src/components/Tooltip/Tooltip.api.md +43 -5
  444. package/src/components/Tooltip/Tooltip.cy.ts +48 -0
  445. package/src/components/Tooltip/Tooltip.md +10 -0
  446. package/src/components/Tooltip/Tooltip.vue +20 -5
  447. package/src/components/Tooltip/TooltipBubble.vue +2 -2
  448. package/src/components/Tooltip/TooltipProvider.vue +53 -0
  449. package/src/components/Tooltip/index.ts +1 -0
  450. package/src/components/Tooltip/stories/Group.vue +22 -0
  451. package/src/components/Tooltip/stories/Slots.vue +2 -2
  452. package/src/components/Tooltip/types.ts +1 -1
  453. package/src/components/Tree/Tree.api.md +76 -18
  454. package/src/components/Tree/Tree.md +144 -2
  455. package/src/components/Tree/Tree.vue +276 -97
  456. package/src/components/Tree/TreeItem.vue +263 -0
  457. package/src/components/Tree/index.ts +9 -1
  458. package/src/components/Tree/stories/DragDrop.vue +94 -0
  459. package/src/components/Tree/stories/Example.vue +11 -34
  460. package/src/components/Tree/stories/ExpandAll.vue +48 -0
  461. package/src/components/Tree/stories/Guides.vue +49 -0
  462. package/src/components/Tree/stories/ListView.vue +74 -0
  463. package/src/components/Tree/tree.cy.ts +218 -90
  464. package/src/components/Tree/types.ts +114 -24
  465. package/src/components/Tree/useTreeDragDrop.ts +203 -0
  466. package/src/components/Tree/useTreeKeyboard.ts +109 -0
  467. package/src/components/VueGridLayout/Layout.vue +1 -1
  468. package/src/components/shared/picker/PickerShell.vue +20 -15
  469. package/src/components/shared/popover/PopoverPanel.vue +67 -0
  470. package/src/components/shared/popover/popoverPanel.css +102 -0
  471. package/src/components/shared/selection/utils.ts +6 -6
  472. package/src/composables/useAutofocusOnOpen.ts +2 -0
  473. package/src/composables/useScreenSize.ts +46 -0
  474. package/src/composables/useScrollContainer.ts +108 -0
  475. package/src/composables/useShortcut.ts +3 -0
  476. package/src/data-fetching/docStore.test.ts +74 -0
  477. package/src/data-fetching/docStore.ts +18 -7
  478. package/src/data-fetching/useCall/types.ts +1 -0
  479. package/src/data-fetching/useCall/useCall.test.ts +43 -0
  480. package/src/data-fetching/useCall/useCall.ts +17 -4
  481. package/src/data-fetching/useDoc/useDoc.test.ts +61 -2
  482. package/src/data-fetching/useDoc/useDoc.ts +35 -15
  483. package/src/data-fetching/useDoctype/useDoctype.ts +6 -5
  484. package/src/data-fetching/useFrappeFetch.ts +17 -4
  485. package/src/data-fetching/useList/types.ts +1 -0
  486. package/src/data-fetching/useList/useList.test.ts +40 -0
  487. package/src/data-fetching/useList/useList.ts +20 -13
  488. package/src/data-fetching/useNewDoc/useNewDoc.ts +9 -5
  489. package/src/directives/focus.ts +3 -3
  490. package/src/index.ts +105 -74
  491. package/src/mocks/handlers.ts +8 -0
  492. package/src/molecules/editor/Editor.cy.ts +6 -1
  493. package/src/molecules/editor/EditorBubbleMenu.vue +1 -1
  494. package/src/molecules/editor/EditorContent.vue +50 -9
  495. package/src/molecules/editor/EditorFixedMenu.vue +2 -1
  496. package/src/molecules/editor/EditorFloatingMenu.vue +1 -1
  497. package/src/molecules/editor/EditorTableMenu.vue +303 -0
  498. package/src/molecules/editor/MenuItems.vue +81 -69
  499. package/src/molecules/editor/commands.ts +10 -2
  500. package/src/molecules/editor/components/AttachmentNodeView.vue +115 -0
  501. package/src/molecules/editor/components/EditorDropZone.vue +105 -0
  502. package/src/molecules/editor/components/EditorPopover.vue +89 -0
  503. package/src/molecules/editor/components/MediaNodeView.vue +156 -49
  504. package/src/molecules/editor/components/MediaResizeHandles.vue +38 -0
  505. package/src/molecules/editor/components/MediaToolbar.vue +108 -54
  506. package/src/molecules/editor/components/TableContextMenu.vue +144 -0
  507. package/src/molecules/editor/components/UploadProgressIndicator.vue +33 -0
  508. package/src/molecules/editor/components/VideoControls.vue +208 -0
  509. package/src/molecules/editor/components/font-color/ColorSwatchGrid.vue +3 -5
  510. package/src/molecules/editor/components/font-color/fontColorController.ts +28 -23
  511. package/src/molecules/editor/components/font-color/swatches.ts +1 -1
  512. package/src/molecules/editor/components/media-node-view-controller.ts +4 -4
  513. package/src/molecules/editor/components/media-node-view-utils.test.ts +0 -13
  514. package/src/molecules/editor/components/media-node-view-utils.ts +0 -10
  515. package/src/molecules/editor/components/table-color/tableCellColorController.ts +80 -0
  516. package/src/molecules/editor/components/table-size-picker/TableSizePicker.vue +92 -0
  517. package/src/molecules/editor/components/table-size-picker/tableSizePickerController.ts +40 -0
  518. package/src/molecules/editor/composables/useEditorFileDrop.ts +117 -0
  519. package/src/molecules/editor/composables/useFloatingPopup.ts +46 -2
  520. package/src/molecules/editor/composables/useNodeViewResize.test.ts +60 -11
  521. package/src/molecules/editor/composables/useNodeViewResize.ts +80 -21
  522. package/src/molecules/editor/composables/useTableCellColorState.ts +78 -0
  523. package/src/molecules/editor/composables/useWindowFileDragging.ts +68 -0
  524. package/src/molecules/editor/extensions/attachment/attachment-engine.ts +250 -0
  525. package/src/molecules/editor/extensions/attachment/attachment-extension.ts +248 -0
  526. package/src/molecules/editor/extensions/attachment/attachment.flow.test.ts +80 -0
  527. package/src/molecules/editor/extensions/attachment/attachment.roundtrip.test.ts +50 -0
  528. package/src/molecules/editor/extensions/attachment/index.ts +5 -0
  529. package/src/molecules/editor/extensions/code-block/CodeBlockComponent.css +16 -26
  530. package/src/molecules/editor/extensions/code-block/CodeBlockComponent.vue +107 -22
  531. package/src/molecules/editor/extensions/content-paste/content-paste-extension.ts +5 -3
  532. package/src/molecules/editor/extensions/iframe/IframeInsertDialog.vue +34 -7
  533. package/src/molecules/editor/extensions/iframe/IframeNodeView.vue +54 -48
  534. package/src/molecules/editor/extensions/iframe/iframe-allowlist.ts +33 -4
  535. package/src/molecules/editor/extensions/iframe/iframe-commands.ts +49 -5
  536. package/src/molecules/editor/extensions/iframe/iframe-embed-utils.ts +30 -0
  537. package/src/molecules/editor/extensions/iframe/iframe-extension.ts +4 -4
  538. package/src/molecules/editor/extensions/iframe/iframeInsertDialogController.ts +12 -1
  539. package/src/molecules/editor/extensions/iframe/index.ts +4 -4
  540. package/src/molecules/editor/extensions/iframe/useIframeDialog.ts +25 -13
  541. package/src/molecules/editor/extensions/image/image-extension.ts +29 -11
  542. package/src/molecules/editor/extensions/image-group/ImageGroupGrid.vue +27 -11
  543. package/src/molecules/editor/extensions/image-group/ImageGroupGridCell.vue +55 -11
  544. package/src/molecules/editor/extensions/image-group/ImageGroupNodeView.vue +64 -31
  545. package/src/molecules/editor/extensions/image-group/ImageGroupUploadDialog.vue +84 -40
  546. package/src/molecules/editor/extensions/image-group/image-group-extension.ts +4 -3
  547. package/src/molecules/editor/extensions/image-group/useImageGroupDialog.ts +116 -17
  548. package/src/molecules/editor/extensions/link/LinkEditorPopup.vue +214 -71
  549. package/src/molecules/editor/extensions/link/link-click-plugin.ts +10 -15
  550. package/src/molecules/editor/extensions/link/link-commands.ts +24 -3
  551. package/src/molecules/editor/extensions/link/link-extension.ts +11 -2
  552. package/src/molecules/editor/extensions/link/link-popup-controller.test.ts +49 -0
  553. package/src/molecules/editor/extensions/link/link-popup-controller.ts +67 -2
  554. package/src/molecules/editor/extensions/link/link-shortcut-plugin.ts +7 -2
  555. package/src/molecules/editor/extensions/media-drop/media-drop-extension.ts +177 -0
  556. package/src/molecules/editor/extensions/shared/media-dimensions.ts +36 -3
  557. package/src/molecules/editor/extensions/shared/media-node-ops.ts +17 -0
  558. package/src/molecules/editor/extensions/shared/media-plugin.test.ts +60 -0
  559. package/src/molecules/editor/extensions/shared/media-plugin.ts +7 -37
  560. package/src/molecules/editor/extensions/shared/media-upload-engine.test.ts +39 -2
  561. package/src/molecules/editor/extensions/shared/media-upload-engine.ts +104 -10
  562. package/src/molecules/editor/extensions/shared/media-upload-state.ts +55 -0
  563. package/src/molecules/editor/extensions/shared/media-upload-types.ts +52 -1
  564. package/src/molecules/editor/extensions/shared/suggestion-helpers.ts +20 -0
  565. package/src/molecules/editor/extensions/shared/suggestion-types.ts +7 -0
  566. package/src/molecules/editor/extensions/shared/upload-types.ts +1 -0
  567. package/src/molecules/editor/extensions/slash-commands/slash-commands-extension.test.ts +38 -0
  568. package/src/molecules/editor/extensions/slash-commands/slash-commands-extension.ts +119 -55
  569. package/src/molecules/editor/extensions/suggestion/SuggestionList.vue +62 -22
  570. package/src/molecules/editor/extensions/suggestion/SuggestionListItem.vue +1 -1
  571. package/src/molecules/editor/extensions/suggestion/createSuggestionExtension.ts +4 -0
  572. package/src/molecules/editor/extensions/table/drag-scroll.ts +154 -0
  573. package/src/molecules/editor/extensions/table/table-cell-color.ts +188 -0
  574. package/src/molecules/editor/extensions/table/table-navigation.ts +560 -0
  575. package/src/molecules/editor/extensions/table/table-selection-overlay.ts +137 -0
  576. package/src/molecules/editor/extensions/toc-node/TocNodeView.vue +1 -1
  577. package/src/molecules/editor/extensions/toc-node/toc-render.ts +7 -3
  578. package/src/molecules/editor/extensions/video/video-extension.ts +72 -5
  579. package/src/molecules/editor/extensions.ts +176 -8
  580. package/src/molecules/editor/index.ts +9 -4
  581. package/src/molecules/editor/kits.test.ts +21 -1
  582. package/src/molecules/editor/kits.ts +56 -33
  583. package/src/molecules/editor/menu.test.ts +3 -1
  584. package/src/molecules/editor/menu.ts +180 -18
  585. package/src/molecules/editor/stories/Comment.vue +4 -4
  586. package/src/molecules/editor/stories/Inline.vue +1 -1
  587. package/src/molecules/editor/stories/Primitives.vue +1 -1
  588. package/src/molecules/editor/stories/RichText.vue +1 -1
  589. package/src/molecules/editor/style.css +80 -3
  590. package/src/molecules/editor/useEditor.test.ts +4 -0
  591. package/src/molecules/editor/useEditor.ts +7 -3
  592. package/src/molecules/list/List.cy.ts +626 -0
  593. package/src/molecules/list/List.vue +93 -0
  594. package/src/molecules/list/ListCell.vue +15 -0
  595. package/src/molecules/list/ListGroup.vue +40 -0
  596. package/src/molecules/list/ListHeader.vue +62 -0
  597. package/src/molecules/list/ListHeaderCell.vue +26 -0
  598. package/src/molecules/list/ListHeaderCellSort.vue +106 -0
  599. package/src/molecules/list/ListRow.vue +55 -0
  600. package/src/molecules/list/ListRowBase.vue +103 -0
  601. package/src/molecules/list/ListRows.vue +120 -0
  602. package/src/molecules/list/index.ts +24 -0
  603. package/src/molecules/list/list-context.ts +44 -0
  604. package/src/molecules/list/list.api.md +276 -0
  605. package/src/molecules/list/list.md +119 -0
  606. package/src/molecules/list/stories/Columns.vue +103 -0
  607. package/src/molecules/list/stories/Feed.vue +105 -0
  608. package/src/molecules/list/stories/Virtual.vue +31 -0
  609. package/src/molecules/list/style.css +173 -0
  610. package/src/molecules/list/types.ts +82 -0
  611. package/src/molecules/list/useVirtualRows.ts +80 -0
  612. package/src/resources/documentResource.d.ts +28 -0
  613. package/src/resources/documentResource.js +32 -4
  614. package/src/resources/documentResource.test.ts +111 -0
  615. package/src/resources/listResource.d.ts +33 -0
  616. package/src/resources/plugin.d.ts +7 -0
  617. package/src/resources/resources.d.ts +35 -0
  618. package/src/utils/{call.js → call.ts} +50 -9
  619. package/src/utils/config.ts +16 -1
  620. package/src/utils/confirmDialog.d.ts +17 -0
  621. package/src/utils/debounce.ts +6 -7
  622. package/src/utils/dialog.cy.ts +9 -9
  623. package/src/utils/fileSize.ts +36 -0
  624. package/src/utils/fileUploadHandler.ts +46 -6
  625. package/src/utils/frappeRequest.test.ts +79 -0
  626. package/src/utils/{frappeRequest.js → frappeRequest.ts} +76 -13
  627. package/src/utils/pageMeta.ts +1 -1
  628. package/src/utils/plugin.ts +58 -0
  629. package/src/utils/{request.js → request.ts} +28 -3
  630. package/src/utils/{socketio.js → socketio.ts} +11 -1
  631. package/src/utils/theme.ts +48 -57
  632. package/src/utils/useFileUpload.ts +80 -23
  633. package/tailwind/audit-token-drift.cjs +176 -0
  634. package/tailwind/colorPalette.js +69 -8
  635. package/tailwind/colors.json +1115 -397
  636. package/tailwind/figma-tokens-to-theme.js +364 -0
  637. package/tailwind/generated/colors.json +1217 -0
  638. package/tailwind/generated/effects.json +41 -0
  639. package/tailwind/generated/radius.json +20 -0
  640. package/tailwind/generated/typography.json +479 -0
  641. package/tailwind/migrate-tokens-v2.js +453 -0
  642. package/tailwind/migrate-tokens-v2.test.js +55 -0
  643. package/tailwind/plugin.js +220 -15
  644. package/tailwind/preset.js +15 -0
  645. package/tailwind/tokens.js +35 -37
  646. package/tsconfig.base.json +2 -2
  647. package/vitepress/components/Docs/CommandPalette.vue +214 -0
  648. package/vitepress/components/Docs/Demo.vue +60 -0
  649. package/vitepress/components/Docs/EmitsTable.vue +99 -0
  650. package/vitepress/components/Docs/MobileNavSheet.vue +148 -0
  651. package/vitepress/components/Docs/OnThisPage.vue +74 -0
  652. package/vitepress/components/Docs/PrevNextBtns.vue +58 -0
  653. package/vitepress/components/Docs/PropsTable.vue +185 -0
  654. package/vitepress/components/Docs/Search.vue +34 -0
  655. package/vitepress/components/Docs/Sidebar.vue +91 -0
  656. package/vitepress/components/Docs/SlotsTable.vue +99 -0
  657. package/vitepress/components/Docs/index.ts +13 -0
  658. package/vitepress/components/Docs/sidebarList.ts +33 -0
  659. package/vitepress/components/Layout.vue +58 -0
  660. package/vitepress/components/Navbar.vue +126 -0
  661. package/vitepress/components/index.ts +3 -0
  662. package/vitepress/composables/index.ts +3 -0
  663. package/vitepress/composables/useTheme.ts +39 -0
  664. package/vitepress/css/fonts/Inter-Italic.var.woff2 +0 -0
  665. package/vitepress/css/fonts/Inter.var.woff2 +0 -0
  666. package/vitepress/css/style.css +198 -0
  667. package/vitepress/index.d.ts +23 -0
  668. package/vitepress/index.node.ts +175 -0
  669. package/vitepress/index.ts +17 -0
  670. package/vitepress/plugins/colocatedComponentDocs.ts +164 -0
  671. package/vitepress/plugins/componentTransformer.ts +286 -0
  672. package/vitepress/plugins/index.ts +12 -0
  673. package/vitepress/state.ts +10 -0
  674. package/vitepress/theme/index.ts +21 -0
  675. package/frappe/telemetry/utils.ts +0 -15
  676. package/src/components/Badge/stories/Themes.vue +0 -10
  677. package/src/components/Badge/stories/Variants.vue +0 -10
  678. package/src/components/Button/stories/Icons.vue +0 -27
  679. package/src/components/Button/stories/Sizes.vue +0 -11
  680. package/src/components/Button/stories/Themes.vue +0 -10
  681. package/src/components/Button/stories/Variants.vue +0 -10
  682. package/src/components/Popover/stories/Hover.vue +0 -14
  683. package/src/components/Resource.vue +0 -21
  684. package/src/components/Sidebar/stories/Example.vue +0 -76
  685. package/src/components/Spinner.vue +0 -3
  686. package/src/components/TabButtons/TabButtons.story.vue +0 -22
  687. package/src/utils/plugin.js +0 -24
  688. /package/src/components/Dropdown/stories/{02_Shortcuts.vue → Shortcuts.vue} +0 -0
  689. /package/src/components/Dropdown/stories/{01_Simple.vue → Simple.vue} +0 -0
  690. /package/src/components/Dropdown/stories/{03_Submenus.vue → Submenus.vue} +0 -0
  691. /package/src/components/Dropdown/stories/{04_Switches.vue → Switches.vue} +0 -0
  692. /package/src/components/{Dropdown/DropdownRenderContentAsChild.vue → Menu/MenuRenderContentAsChild.vue} +0 -0
@@ -9,18 +9,18 @@
9
9
  unstyled: true,
10
10
  classes: {
11
11
  toast:
12
- 'group py-2.5 flex items-center px-4 bg-surface-gray-6 rounded-md shadow-xl w-[360px] after:bg-transparent',
13
- title: 'text-p-base font-medium text-ink-white',
14
- description: 'text-p-base text-ink-white',
15
- icon: 'mr-2 text-ink-white [&_svg]:size-4',
12
+ 'group py-2.5 flex items-center px-4 bg-surface-gray-9 rounded-md shadow-xl w-[360px] after:bg-transparent',
13
+ title: 'text-p-base font-medium text-ink-base',
14
+ description: 'text-p-base text-ink-base',
15
+ icon: 'mr-2 text-ink-base [&_svg]:size-4',
16
16
  closeButton:
17
- 'order-1 ml-auto group-has-[[data-action]]:ml-0 grid place-items-center rounded-sm text-ink-white hover:bg-surface-gray-5 size-5 !transition-colors [&_svg]:size-4',
17
+ 'order-1 ml-auto group-has-[[data-action]]:ml-0 grid place-items-center rounded-sm text-ink-base hover:bg-surface-gray-8 size-5 !transition-colors [&_svg]:size-4',
18
18
  actionButton:
19
- 'flex shrink-0 text-ink-blue-link font-medium py-1.5 px-2 h-7 text-base mr-2 ml-auto bg-transparent hover:bg-surface-gray-5 rounded !transition-colors',
19
+ 'flex shrink-0 text-ink-blue-link font-medium py-1.5 px-2 h-7 text-base mr-2 ml-auto bg-transparent hover:bg-surface-gray-8 rounded !transition-colors',
20
20
  cancelButton:
21
- 'flex text-ink-blue-link font-medium py-1.5 px-2 text-base hover:bg-surface-gray-5 transition-colors',
22
- error: '[&_[data-icon]]:text-ink-red-2',
23
- warning: '[&_[data-icon]]:text-ink-amber-2',
21
+ 'flex text-ink-blue-link font-medium py-1.5 px-2 text-base hover:bg-surface-gray-8 transition-colors',
22
+ error: '[&_[data-icon]]:text-ink-red-5',
23
+ warning: '[&_[data-icon]]:text-ink-amber-5',
24
24
  },
25
25
  }"
26
26
  />
@@ -40,6 +40,15 @@ import { Toaster } from 'vue-sonner'
40
40
  height: auto;
41
41
  }
42
42
 
43
+ /* In the collapsed stack vue-sonner clamps every non-front toast to the front
44
+ toast's height (--front-toast-height) and hides their content. The content is
45
+ hidden only on [data-styled='true'] toasts, which `unstyled` strips — so a
46
+ multiline toast behind a single-line one spills its extra lines out the top.
47
+ Replicate sonner's intended behavior and fade the collapsed back toasts out. */
48
+ [data-sonner-toast][data-expanded='false'][data-front='false'] > * {
49
+ opacity: 0;
50
+ }
51
+
43
52
  .sonner-loading-wrapper {
44
53
  position: static;
45
54
  }
@@ -11,7 +11,7 @@ function celebrate() {
11
11
  function favorited() {
12
12
  toast('Added to favorites', {
13
13
  description: 'Find it later in your saved items.',
14
- icon: () => h('span', { class: 'lucide-heart size-4 text-ink-red-2' }),
14
+ icon: () => h('span', { class: 'lucide-heart size-4 text-ink-red-5' }),
15
15
  })
16
16
  }
17
17
 
@@ -1,9 +1,24 @@
1
+ import DOMPurify from 'dompurify'
1
2
  import { h, isVNode, type Component, type VNode } from 'vue'
2
3
  import { toast as sonnerToast } from 'vue-sonner'
3
4
  import { warnDeprecated } from '../../utils/warnDeprecated'
4
5
 
5
6
  type ToastType = 'success' | 'error' | 'warning' | 'info'
6
7
 
8
+ type SonnerData = Parameters<typeof sonnerToast>[1]
9
+
10
+ // Tags that are safe to render inside a toast message. Anything outside this set is stripped by DOMPurify.
11
+ const ALLOWED_TAGS = ['a', 'em', 'strong', 'i', 'b', 'u']
12
+
13
+ // Sonner renders a string message as plain text and a VNode via
14
+ // `<component :is>`. To render safe HTML we sanitize the string and return a
15
+ // render function; non-string values (already VNodes/components) pass through.
16
+ function renderSafeHTML<T>(message: T): T | (() => VNode) {
17
+ if (typeof message !== 'string') return message
18
+ const html = DOMPurify.sanitize(message, { ALLOWED_TAGS })
19
+ return () => h('span', { innerHTML: html })
20
+ }
21
+
7
22
  interface LegacyCreateOptions {
8
23
  id?: string | number
9
24
  message: string
@@ -62,20 +77,21 @@ function isLegacyObject(arg: unknown): arg is LegacyToastObject {
62
77
 
63
78
  function dispatch(
64
79
  type: ToastType | undefined,
65
- message: string,
66
- data: Parameters<typeof sonnerToast>[1],
80
+ message: string | Component | VNode,
81
+ data: SonnerData,
67
82
  ) {
83
+ const safeMessage = renderSafeHTML(message)
68
84
  switch (type) {
69
85
  case 'success':
70
- return sonnerToast.success(message, data)
86
+ return sonnerToast.success(safeMessage, data)
71
87
  case 'error':
72
- return sonnerToast.error(message, data)
88
+ return sonnerToast.error(safeMessage, data)
73
89
  case 'warning':
74
- return sonnerToast.warning(message, data)
90
+ return sonnerToast.warning(safeMessage, data)
75
91
  case 'info':
76
- return sonnerToast.info(message, data)
92
+ return sonnerToast.info(safeMessage, data)
77
93
  default:
78
- return sonnerToast(message, data)
94
+ return sonnerToast(safeMessage, data)
79
95
  }
80
96
  }
81
97
 
@@ -107,7 +123,7 @@ function toastFn(
107
123
  if (isLegacyObject(message)) {
108
124
  return callLegacyObject(message)
109
125
  }
110
- return sonnerToast(message as string, options)
126
+ return sonnerToast(renderSafeHTML(message as string), options)
111
127
  }
112
128
 
113
129
  function create(options: LegacyCreateOptions) {
@@ -142,6 +158,14 @@ function removeAll() {
142
158
  }
143
159
 
144
160
  export const toast = Object.assign(toastFn, sonnerToast, {
161
+ success: (message: string | Component | VNode, data?: SonnerData) =>
162
+ dispatch('success', message, data),
163
+ error: (message: string | Component | VNode, data?: SonnerData) =>
164
+ dispatch('error', message, data),
165
+ warning: (message: string | Component | VNode, data?: SonnerData) =>
166
+ dispatch('warning', message, data),
167
+ info: (message: string | Component | VNode, data?: SonnerData) =>
168
+ dispatch('info', message, data),
145
169
  create,
146
170
  remove,
147
171
  removeAll,
@@ -14,7 +14,7 @@
14
14
  },
15
15
  {
16
16
  name: 'hoverDelay',
17
- description: 'Delay (in ms) before showing the tooltip on hover.',
17
+ description: 'Delay (in seconds) before showing the tooltip on hover.',
18
18
  required: false,
19
19
  type: 'number',
20
20
  default: '0.5'
@@ -23,7 +23,7 @@
23
23
  name: 'placement',
24
24
  description: 'Position of the tooltip relative to the trigger.',
25
25
  required: false,
26
- type: '"bottom" | "top" | "right" | "left"',
26
+ type: '"top" | "right" | "bottom" | "left"',
27
27
  default: '"top"'
28
28
  },
29
29
  {
@@ -31,7 +31,7 @@
31
31
  description: 'Custom classes applied to the tooltip arrow.',
32
32
  required: false,
33
33
  type: 'any',
34
- default: '"fill-surface-gray-7"'
34
+ default: '"fill-surface-gray-10"'
35
35
  },
36
36
  {
37
37
  name: 'disabled',
@@ -65,7 +65,7 @@
65
65
  name: 'side',
66
66
  description: 'Preferred popover side relative to the trigger.',
67
67
  required: false,
68
- type: '"bottom" | "top" | "right" | "left"',
68
+ type: '"top" | "right" | "bottom" | "left"',
69
69
  default: '"top"'
70
70
  },
71
71
  {
@@ -79,7 +79,7 @@
79
79
  description: 'Fill class for the arrow — defaults to match the bubble shell.',
80
80
  required: false,
81
81
  type: 'string',
82
- default: '"fill-surface-gray-7"'
82
+ default: '"fill-surface-gray-10"'
83
83
  }
84
84
  ]
85
85
 
@@ -100,6 +100,38 @@
100
100
  type: 'any'
101
101
  }
102
102
  ]
103
+
104
+ const tooltipProviderProps = [
105
+ {
106
+ name: 'hoverDelay',
107
+ description: 'Delay (in seconds) before the first tooltip in the group opens.',
108
+ required: false,
109
+ type: 'number',
110
+ default: '0.5'
111
+ },
112
+ {
113
+ name: 'skipDelay',
114
+ description: 'Window (in seconds) during which moving to another trigger in this\ngroup opens its tooltip with no delay. Mirrors reka\'s\n`skipDelayDuration`.',
115
+ required: false,
116
+ type: 'number',
117
+ default: '0.3'
118
+ },
119
+ {
120
+ name: 'disableHoverableContent',
121
+ description: 'When `true`, hovering the tooltip body closes it as the pointer\nleaves the trigger.',
122
+ required: false,
123
+ type: 'boolean',
124
+ default: 'false'
125
+ }
126
+ ]
127
+
128
+ const tooltipProviderSlots = [
129
+ {
130
+ name: 'default',
131
+ description: '',
132
+ type: '{}'
133
+ }
134
+ ]
103
135
  </script>
104
136
  ## API Reference
105
137
 
@@ -115,3 +147,9 @@
115
147
 
116
148
  <SlotsTable :data="tooltipBubbleSlots"/>
117
149
 
150
+ ### TooltipProvider
151
+
152
+ <PropsTable folder="Tooltip" name="TooltipProvider" :data="tooltipProviderProps"/>
153
+
154
+ <SlotsTable :data="tooltipProviderSlots"/>
155
+
@@ -1,4 +1,5 @@
1
1
  import Tooltip from './Tooltip.vue'
2
+ import TooltipProvider from './TooltipProvider.vue'
2
3
  import Button from '../Button/Button.vue'
3
4
  import { h } from 'vue'
4
5
 
@@ -63,4 +64,51 @@ describe('Tooltip', () => {
63
64
  cy.get('button').trigger('focus')
64
65
  cy.get('svg').should('has.class', 'fill-red-500')
65
66
  })
67
+
68
+ it('grouping under a shared TooltipProvider skips the re-delay between triggers', () => {
69
+ // `disableHoverableContent` makes leaving the trigger close its tooltip,
70
+ // which opens the provider's skip-delay window — the toolbar use case.
71
+ const Group = () =>
72
+ h(
73
+ TooltipProvider,
74
+ { hoverDelay: 0.5, skipDelay: 0.3, disableHoverableContent: true },
75
+ () => [
76
+ h(Tooltip, { text: 'First' }, () =>
77
+ h('button', { 'data-cy': 'first' }, 'one'),
78
+ ),
79
+ h(Tooltip, { text: 'Second' }, () =>
80
+ h('button', { 'data-cy': 'second' }, 'two'),
81
+ ),
82
+ ],
83
+ )
84
+
85
+ cy.clock()
86
+ cy.mount(Group)
87
+
88
+ // First trigger incurs the full hover delay before opening.
89
+ cy.get('[data-cy=first]').trigger('pointermove')
90
+ cy.get('[role=tooltip]').should('not.exist')
91
+ cy.tick(500)
92
+ cy.get('[role=tooltip]').should('have.text', 'First')
93
+ cy.get('[data-cy=first]').should('have.attr', 'data-state', 'delayed-open')
94
+
95
+ // Leaving closes it and opens the skip-delay window.
96
+ cy.get('[data-cy=first]').trigger('pointerleave')
97
+
98
+ // Moving to the neighbour opens instantly — no clock tick needed.
99
+ cy.get('[data-cy=second]').trigger('pointermove')
100
+ cy.get('[role=tooltip]').should('have.text', 'Second')
101
+ cy.get('[data-cy=second]').should('have.attr', 'data-state', 'instant-open')
102
+ })
103
+
104
+ it('a standalone Tooltip still mounts its own provider (no grouping)', () => {
105
+ // Without a surrounding provider every tooltip delays independently.
106
+ cy.clock()
107
+ cy.mount(h(Tooltip, { text: 'solo', hoverDelay: 0.5 }, () => h('button', 'k')))
108
+
109
+ cy.get('button').trigger('pointermove')
110
+ cy.get('[role=tooltip]').should('not.exist')
111
+ cy.tick(500)
112
+ cy.get('button').should('have.attr', 'data-state', 'delayed-open')
113
+ })
66
114
  })
@@ -2,6 +2,10 @@
2
2
 
3
3
  A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.
4
4
 
5
+ ## Playground
6
+
7
+ <ClientOnly><TooltipBuilder /></ClientOnly>
8
+
5
9
  ## Default
6
10
  <ComponentPreview name="Tooltip-Examples" />
7
11
 
@@ -9,4 +13,10 @@ A popup that displays information related to an element when the element receive
9
13
 
10
14
  <ComponentPreview name="Tooltip-Slots" />
11
15
 
16
+ ## Grouping (shared hover delay)
17
+
18
+ Wrap a group of buttons in a `TooltipProvider` so that once one tooltip is open, moving the pointer to a neighbouring trigger within `skip-delay` opens its tooltip instantly — no delay between adjacent buttons. `Tooltip` and tooltip-bearing `Button`s automatically reuse a surrounding provider instead of creating their own.
19
+
20
+ <ComponentPreview name="Tooltip-Group" />
21
+
12
22
  <!-- @include: ./Tooltip.api.md -->
@@ -1,7 +1,12 @@
1
1
  <script setup lang="ts">
2
- import { TooltipProvider, TooltipRoot, TooltipTrigger } from 'reka-ui'
2
+ import {
3
+ TooltipProvider,
4
+ TooltipRoot,
5
+ TooltipTrigger,
6
+ injectTooltipProviderContext,
7
+ } from 'reka-ui'
3
8
  import TooltipBubble from './TooltipBubble.vue'
4
- import { computed } from 'vue'
9
+ import { computed, type Component } from 'vue'
5
10
  import type { TooltipProps } from './types'
6
11
 
7
12
  defineOptions({
@@ -12,12 +17,22 @@ const props = withDefaults(defineProps<TooltipProps>(), {
12
17
  text: '',
13
18
  placement: 'top',
14
19
  hoverDelay: 0.5,
15
- arrowClass: 'fill-surface-gray-7',
20
+ arrowClass: 'fill-surface-gray-10',
16
21
  disabled: false,
17
22
  })
18
23
 
19
24
  const delayDuration = computed(() => props.hoverDelay * 1000)
20
25
 
26
+ // When already inside a <TooltipProvider> (a button group), reuse that shared
27
+ // context so the group's skip-delay spans this tooltip too, instead of
28
+ // mounting a private provider that would isolate it.
29
+ const parentProvider = injectTooltipProviderContext(null)
30
+ const Passthrough: Component = (_, { slots }) => slots.default?.()
31
+ const Provider = computed(() => (parentProvider ? Passthrough : TooltipProvider))
32
+ const providerProps = computed(() =>
33
+ parentProvider ? {} : { delayDuration: delayDuration.value },
34
+ )
35
+
21
36
  defineSlots<{
22
37
  /**
23
38
  * Default trigger slot.
@@ -42,7 +57,7 @@ defineSlots<{
42
57
 
43
58
  <template>
44
59
  <slot v-if="disabled" />
45
- <TooltipProvider v-else :delayDuration="delayDuration">
60
+ <component :is="Provider" v-else v-bind="providerProps">
46
61
  <TooltipRoot>
47
62
  <TooltipTrigger as-child>
48
63
  <slot />
@@ -61,5 +76,5 @@ defineSlots<{
61
76
  </template>
62
77
  </TooltipBubble>
63
78
  </TooltipRoot>
64
- </TooltipProvider>
79
+ </component>
65
80
  </template>
@@ -21,7 +21,7 @@ withDefaults(
21
21
  /** Fill class for the arrow — defaults to match the bubble shell. */
22
22
  arrowClass?: string
23
23
  }>(),
24
- { side: 'top', arrowClass: 'fill-surface-gray-7' },
24
+ { side: 'top', arrowClass: 'fill-surface-gray-10' },
25
25
  )
26
26
 
27
27
  defineSlots<{
@@ -39,7 +39,7 @@ defineSlots<{
39
39
  <TooltipContent :side="side" :side-offset="4" class="z-[100]">
40
40
  <slot name="body">
41
41
  <div
42
- class="rounded bg-surface-gray-7 px-2 py-1 text-xs text-ink-white shadow-xl"
42
+ class="rounded bg-surface-gray-10 px-2 py-1 text-xs text-ink-base shadow-xl"
43
43
  >
44
44
  <slot name="content">
45
45
  <slot>{{ text }}</slot>
@@ -0,0 +1,53 @@
1
+ <script setup lang="ts">
2
+ import { TooltipProvider as RekaTooltipProvider } from 'reka-ui'
3
+ import { computed } from 'vue'
4
+
5
+ /**
6
+ * Groups multiple `<Tooltip>`s (and tooltip-bearing `<Button>`s) under a
7
+ * single tooltip context. Once any tooltip in the group has opened, moving
8
+ * the pointer to another trigger within `skipDelay` opens its tooltip
9
+ * instantly — no hover delay between neighbouring buttons.
10
+ *
11
+ * `<Tooltip>` and `<Button>` detect this provider and skip mounting their
12
+ * own, so the shared skip-delay window spans the whole group:
13
+ *
14
+ * ```vue
15
+ * <TooltipProvider>
16
+ * <Button icon="bold" :tooltip="'Bold'" />
17
+ * <Tooltip text="Italic"><button>…</button></Tooltip>
18
+ * <Tooltip text="Underline"><button>…</button></Tooltip>
19
+ * </TooltipProvider>
20
+ * ```
21
+ */
22
+ const props = withDefaults(
23
+ defineProps<{
24
+ /** Delay (in seconds) before the first tooltip in the group opens. */
25
+ hoverDelay?: number
26
+ /**
27
+ * Window (in seconds) during which moving to another trigger in this
28
+ * group opens its tooltip with no delay. Mirrors reka's
29
+ * `skipDelayDuration`.
30
+ */
31
+ skipDelay?: number
32
+ /**
33
+ * When `true`, hovering the tooltip body closes it as the pointer
34
+ * leaves the trigger.
35
+ */
36
+ disableHoverableContent?: boolean
37
+ }>(),
38
+ { hoverDelay: 0.5, skipDelay: 0.3, disableHoverableContent: false },
39
+ )
40
+
41
+ const delayDuration = computed(() => props.hoverDelay * 1000)
42
+ const skipDelayDuration = computed(() => props.skipDelay * 1000)
43
+ </script>
44
+
45
+ <template>
46
+ <RekaTooltipProvider
47
+ :delay-duration="delayDuration"
48
+ :skip-delay-duration="skipDelayDuration"
49
+ :disable-hoverable-content="disableHoverableContent"
50
+ >
51
+ <slot />
52
+ </RekaTooltipProvider>
53
+ </template>
@@ -1,3 +1,4 @@
1
1
  export { default as Tooltip } from './Tooltip.vue'
2
2
  export { default as TooltipBubble } from './TooltipBubble.vue'
3
+ export { default as TooltipProvider } from './TooltipProvider.vue'
3
4
  export type { TooltipProps } from './types'
@@ -0,0 +1,22 @@
1
+ <script setup lang="ts">
2
+ import { Button, Tooltip, TooltipProvider } from 'frappe-ui'
3
+ </script>
4
+
5
+ <template>
6
+ <!--
7
+ Hover any button to open its tooltip after `hover-delay`. Sweeping the
8
+ pointer to a neighbour within `skip-delay` opens the next tooltip
9
+ instantly — no per-button flicker — because the whole row shares one
10
+ tooltip context.
11
+ -->
12
+ <TooltipProvider :hover-delay="0.5" :skip-delay="0.3">
13
+ <div class="flex items-center gap-1">
14
+ <Button icon="bold" :tooltip="'Bold'" />
15
+ <Button icon="italic" :tooltip="'Italic'" />
16
+ <Button icon="underline" :tooltip="'Underline'" />
17
+ <Tooltip text="Strikethrough">
18
+ <Button icon="minus" />
19
+ </Tooltip>
20
+ </div>
21
+ </TooltipProvider>
22
+ </template>
@@ -3,10 +3,10 @@ import { Button, Tooltip } from 'frappe-ui'
3
3
  </script>
4
4
 
5
5
  <template>
6
- <Tooltip arrow-class="fill-surface-white" placement="top">
6
+ <Tooltip arrow-class="fill-surface-base" placement="top">
7
7
  <template #body>
8
8
  <div
9
- class="min-w-[6rem] rounded bg-surface-white px-2 py-1 text-xs text-ink-gray-9 shadow-xl"
9
+ class="min-w-[6rem] rounded bg-surface-base px-2 py-1 text-xs text-ink-gray-9 shadow-xl"
10
10
  >
11
11
  Test
12
12
  </div>
@@ -9,7 +9,7 @@ export interface TooltipProps {
9
9
  text?: string
10
10
 
11
11
  /**
12
- * Delay (in ms) before showing the tooltip on hover.
12
+ * Delay (in seconds) before showing the tooltip on hover.
13
13
  */
14
14
  hoverDelay?: number
15
15
 
@@ -6,43 +6,99 @@
6
6
 
7
7
  const propsData = [
8
8
  {
9
- name: 'node',
10
- description: 'Root tree node to render.\nCan contain nested children to form the tree structure.',
9
+ name: 'nodes',
10
+ description: 'Forest roots to render. Each node may contain nested children to form the\ntree structure.',
11
11
  required: true,
12
- type: 'TreeNode'
12
+ type: 'TreeNode[]'
13
13
  },
14
14
  {
15
15
  name: 'nodeKey',
16
- description: 'Unique key used to identify each node.\nUsually an id-like property present on every node.',
17
- required: true,
18
- type: 'string'
16
+ description: 'Name of the field that uniquely identifies each node.',
17
+ required: false,
18
+ type: 'string',
19
+ default: '"key"'
20
+ },
21
+ {
22
+ name: 'draggable',
23
+ description: 'Enable drag-and-drop. Nodes can be dragged onto one another to reparent, or\nbetween siblings to reorder.',
24
+ required: false,
25
+ type: 'boolean',
26
+ default: 'false'
27
+ },
28
+ {
29
+ name: 'move',
30
+ description: 'Gate a drop while dragging. Receives the live drag context and returns\nwhether the drop is allowed — a rejected target shows the no-drop cursor and\nhides the drop indicator. Built-in guards (drop-on-self, drop-into-own-\ndescendant) run first, so this only carries your domain rules.',
31
+ required: false,
32
+ type: '((ctx: MoveContext) => boolean)'
19
33
  },
20
34
  {
21
- name: 'options',
22
- description: 'Optional configuration for tree layout and behavior.',
35
+ name: 'guides',
36
+ description: 'Visual style of the indentation guides.',
23
37
  required: false,
24
- type: 'TreeOptions',
25
- default: '{\n rowHeight: "25px",\n indentWidth: "20px",\n showIndentationGuides: true,\n defaultCollapsed: true,\n}'
38
+ type: '"connectors" | "lines" | "none"',
39
+ default: '"connectors"'
40
+ },
41
+ {
42
+ name: 'disabled',
43
+ description: 'Disable all interaction — expand/collapse and drag.',
44
+ required: false,
45
+ type: 'boolean',
46
+ default: 'false'
47
+ },
48
+ {
49
+ name: 'expanded',
50
+ description: 'Expand/collapse-all switch. Toggling it writes that value into every node\'s\n`expanded` field. Two-way: it also reflects whether all collapsible nodes are\ncurrently open, so a bound button stays in sync. Per-node state lives on the\nnodes themselves (`node.expanded`).',
51
+ required: false,
52
+ type: 'boolean',
53
+ default: 'false'
26
54
  }
27
55
  ]
28
56
 
29
57
  const slotsData = [
30
58
  {
31
- name: 'node',
32
- description: 'Slot to fully override how a tree node renders',
33
- type: 'any'
59
+ name: 'item',
60
+ description: '',
61
+ type: 'TreeNodeSlotProps'
34
62
  },
35
63
  {
36
- name: 'icon',
37
- description: 'Slot to override only the node expand/collapse icon',
38
- type: 'any'
64
+ name: 'item-prefix',
65
+ description: '',
66
+ type: 'Omit<TreeNodeSlotProps, "toggle">'
67
+ },
68
+ {
69
+ name: 'item-label',
70
+ description: '',
71
+ type: 'Omit<TreeNodeSlotProps, "toggle">'
39
72
  },
40
73
  {
41
- name: 'label',
42
- description: 'Slot to override only the node label/content',
74
+ name: 'item-suffix',
75
+ description: '',
76
+ type: 'Omit<TreeNodeSlotProps, "toggle">'
77
+ },
78
+ {
79
+ name: 'empty',
80
+ description: '',
43
81
  type: 'any'
44
82
  }
45
83
  ]
84
+
85
+ const emitsData = [
86
+ {
87
+ name: 'update:expanded',
88
+ description: 'Fired when the expanded changes.',
89
+ type: '[value: boolean]'
90
+ },
91
+ {
92
+ name: 'drag-start',
93
+ description: '',
94
+ type: '[node: TreeNode]'
95
+ },
96
+ {
97
+ name: 'drag-end',
98
+ description: '',
99
+ type: '[info: DropInfo | null]'
100
+ }
101
+ ]
46
102
  </script>
47
103
  ## API Reference
48
104
 
@@ -50,3 +106,5 @@
50
106
 
51
107
  <SlotsTable :data="slotsData"/>
52
108
 
109
+ <EmitsTable :data="emitsData"/>
110
+