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
@@ -12,7 +12,7 @@ import {
12
12
  OnFetchErrorContext,
13
13
  UseFetchOptions,
14
14
  } from '@vueuse/core'
15
- import { useFrappeFetch } from '../useFrappeFetch'
15
+ import { FrappeResponseError, useFrappeFetch } from '../useFrappeFetch'
16
16
  import { useCall } from '../useCall/useCall'
17
17
  import { parseFilters, makeGetParams, normalizeCacheKey } from '../utils'
18
18
  import { UseListOptions, UseListResponse } from './types'
@@ -37,6 +37,7 @@ export function useList<T extends { name: string }>(
37
37
  immediate = true,
38
38
  refetch = true,
39
39
  cacheKey,
40
+ staleOnError = false,
40
41
  baseUrl = '',
41
42
  url = '',
42
43
  transform,
@@ -69,7 +70,9 @@ export function useList<T extends { name: string }>(
69
70
  const hasPreviousPage = computed(() => _start.value > 0)
70
71
 
71
72
  let normalizedCacheKey = normalizeCacheKey(cacheKey, 'useList')
72
- let cachedResponse = ref<UseListResponse<T> | null>(null)
73
+ let cachedResponse = ref<UseListResponse<T> | null>(
74
+ null,
75
+ ) as Ref<UseListResponse<T> | null>
73
76
 
74
77
  const fetchOptions: UseFetchOptions = {
75
78
  immediate,
@@ -97,20 +100,20 @@ export function useList<T extends { name: string }>(
97
100
  execute,
98
101
  } = useFrappeFetch<UseListResponse<T>>(_url, fetchOptions).get()
99
102
 
100
-
101
-
102
103
  const result = computed(() => {
103
- if (normalizedCacheKey && (out.loading || !out.isFinished)) {
104
- let data = cachedResponse.value
105
- if (data) {
106
- if (transform) {
107
- let returnValue = transform(data as T[])
108
- if (returnValue !== undefined) {
109
- return returnValue
110
- }
104
+ let cachedData = normalizedCacheKey ? cachedResponse.value : null
105
+ if (
106
+ cachedData &&
107
+ canUseCachedFallback(error.value, staleOnError) &&
108
+ (out.loading || !out.isFinished || !allData.value || error.value)
109
+ ) {
110
+ if (transform) {
111
+ let returnValue = transform(cachedData as T[])
112
+ if (returnValue !== undefined) {
113
+ return returnValue
111
114
  }
112
- return data
113
115
  }
116
+ return cachedData
114
117
  }
115
118
  return allData.value
116
119
  })
@@ -249,6 +252,10 @@ export function useList<T extends { name: string }>(
249
252
  return out
250
253
  }
251
254
 
255
+ function canUseCachedFallback(error: unknown, staleOnError: boolean) {
256
+ return !error || (staleOnError && !(error instanceof FrappeResponseError))
257
+ }
258
+
252
259
  function handleAfterFetch<T extends { name: string }>({
253
260
  transform,
254
261
  onSuccess,
@@ -3,8 +3,8 @@ import { useCall } from '../useCall/useCall'
3
3
  import { UseCallOptions } from '../useCall/types'
4
4
  import { docStore } from '../docStore'
5
5
 
6
- type UseNewDocOptions = Omit<
7
- UseCallOptions,
6
+ type UseNewDocOptions<T> = Omit<
7
+ UseCallOptions<any, Partial<T>>,
8
8
  'url' | 'method' | 'params' | 'immediate'
9
9
  >
10
10
 
@@ -15,7 +15,7 @@ type NewDoc<T> = Partial<
15
15
  export function useNewDoc<T extends object>(
16
16
  doctype: string,
17
17
  initialValues: NewDoc<T> = {},
18
- options: UseNewDocOptions = {},
18
+ options: UseNewDocOptions<T> = {},
19
19
  ) {
20
20
  let doc = reactive<NewDoc<T>>(initialValues)
21
21
 
@@ -23,7 +23,7 @@ export function useNewDoc<T extends object>(
23
23
  name: string
24
24
  }
25
25
 
26
- const out = useCall<DocResponse>({
26
+ const out = useCall<DocResponse, Partial<T>>({
27
27
  url: `/api/v2/document/${doctype}`,
28
28
  method: 'POST',
29
29
  params() {
@@ -45,7 +45,11 @@ export function useNewDoc<T extends object>(
45
45
  .then((doc) =>
46
46
  docStore
47
47
  .setDoc({ doctype, ...(doc as DocResponse) })
48
- .then(() => docStore.getDoc(doctype, doc.name.toString()).value as T),
48
+ .then(
49
+ () =>
50
+ docStore.getDoc(doctype, (doc as DocResponse).name.toString())
51
+ .value as T,
52
+ ),
49
53
  )
50
54
  }
51
55
 
@@ -1,4 +1,4 @@
1
- import { type ObjectDirective, type DirectiveBinding, nextTick } from "vue"
1
+ import { type ObjectDirective, type DirectiveBinding, nextTick } from 'vue'
2
2
 
3
3
  interface FocusDirective extends ObjectDirective<HTMLElement> {
4
4
  mounted(el: HTMLElement, binding: DirectiveBinding<boolean>): void
@@ -14,7 +14,7 @@ const focusDirective: FocusDirective = {
14
14
  await nextTick()
15
15
  firstFocusableElement.focus()
16
16
  if (
17
- binding.arg === "autoselect" &&
17
+ binding.arg === 'autoselect' &&
18
18
  (firstFocusableElement instanceof HTMLInputElement ||
19
19
  firstFocusableElement instanceof HTMLTextAreaElement)
20
20
  ) {
@@ -22,7 +22,7 @@ const focusDirective: FocusDirective = {
22
22
  }
23
23
  } else {
24
24
  await nextTick()
25
- document.activeElement?.blur?.()
25
+ ;(document.activeElement as HTMLElement | null)?.blur()
26
26
  }
27
27
  },
28
28
  }
package/src/index.ts CHANGED
@@ -1,128 +1,159 @@
1
- // old data-fetching: resources
1
+ // App setup and plugins
2
+ export { default as FrappeUI } from './utils/plugin'
3
+ export { default as FrappeUIProvider } from './components/Provider/FrappeUIProvider.vue'
4
+ export { getConfig, setConfig } from './utils/config'
5
+ export type { FrappeUIConfig } from './utils/config'
6
+ export { default as pageMetaPlugin } from './utils/pageMeta.js'
7
+ export { usePageMeta } from './utils/pageMeta'
8
+
9
+ // Data fetching
10
+ export * from './data-fetching'
11
+ // Legacy resource API. Keep public until official apps finish the v3 migration.
2
12
  export * from './resources/index.ts'
13
+ export { default as call, createCall } from './utils/call'
14
+ export { frappeRequest } from './utils/frappeRequest'
15
+ export { request } from './utils/request'
16
+ export { default as initSocket } from './utils/socketio'
3
17
 
4
- // components
18
+ // Base components
5
19
  export * from './components/Alert'
6
- export * from './components/Autocomplete'
7
20
  export * from './components/Avatar'
8
21
  export * from './components/Badge'
22
+ export * from './components/BottomSheet'
9
23
  export * from './components/Breadcrumbs'
10
24
  export * from './components/Button'
11
- export { default as Card } from './components/Card.vue'
25
+ export * from './components/Divider'
26
+ export * from './components/Icon'
27
+ export { default as LoadingIndicator } from './components/LoadingIndicator.vue'
28
+ export { default as LoadingText } from './components/LoadingText.vue'
29
+ export * from './components/Progress'
30
+ export * from './components/Rating'
31
+ export * from './components/Skeleton'
32
+ export * from './components/Spinner'
33
+ export * from './components/Tooltip'
34
+
35
+ // Form controls
36
+ export * from './components/Autocomplete'
12
37
  export * from './components/Checkbox'
13
38
  export * from './components/Combobox'
14
39
  export * from './components/DatePicker'
15
- export * from './components/Dialog'
16
- export { default as Dialogs } from './components/Dialogs.vue'
17
- export * from './components/Divider'
18
- export * from './components/Dropdown'
40
+ export * from './components/Duration'
19
41
  export * from './components/ErrorMessage'
20
- export { default as FeatherIcon } from './components/FeatherIcon.vue'
21
42
  export * from './components/FileUploader'
22
43
  export * from './components/FormControl'
23
44
  export { default as FormLabel } from './components/FormLabel.vue'
24
- export { default as Input } from './components/Input.vue'
25
- export * from './components/ItemListRow'
26
- export { default as ListItem } from './components/ListItem.vue'
27
- export { default as ListEmptyState } from './components/ListView/ListEmptyState.vue'
28
- export { default as ListFooter } from './components/ListView/ListFooter.vue'
29
- export { default as ListGroupHeader } from './components/ListView/ListGroupHeader.vue'
30
- export { default as ListGroupRows } from './components/ListView/ListGroupRows.vue'
31
- export { default as ListGroups } from './components/ListView/ListGroups.vue'
32
- export { default as ListHeader } from './components/ListView/ListHeader.vue'
33
- export { default as ListHeaderItem } from './components/ListView/ListHeaderItem.vue'
34
- export { default as ListRow } from './components/ListView/ListRow.vue'
35
- export { default as ListRowItem } from './components/ListView/ListRowItem.vue'
36
- export { default as ListRows } from './components/ListView/ListRows.vue'
37
- export { default as ListSelectBanner } from './components/ListView/ListSelectBanner.vue'
38
- export {
39
- default as List,
40
- default as ListView,
41
- } from './components/ListView/ListView.vue'
42
- export { default as LoadingIndicator } from './components/LoadingIndicator.vue'
43
- export { default as LoadingText } from './components/LoadingText.vue'
44
- export * from './components/MonthPicker'
45
45
  export * from './components/MultiSelect'
46
46
  export * from './components/Password'
47
- export * from './components/Popover'
48
- export * from './components/Progress'
49
- export * from './components/Rating'
50
- export { default as Resource } from './components/Resource.vue'
51
47
  export * from './components/Select'
52
48
  export * from './components/Slider'
53
- export { default as Spinner } from './components/Spinner.vue'
54
49
  export * from './components/Switch'
55
- export * from './components/TabButtons'
56
- export { default as Tabs } from './components/Tabs/Tabs.vue'
57
50
  export * from './components/Textarea'
58
- export * from './components/TextEditor'
59
51
  export * from './components/TextInput'
60
52
  export * from './components/TimePicker'
53
+
54
+ // Dialogs, menus, and feedback
55
+ export * from './components/ContextMenu'
56
+ export * from './components/Dialog'
57
+ export { default as Dialogs } from './components/Dialogs.vue'
58
+ export * from './components/Dropdown'
59
+ export * from './components/HoverCard'
60
+ export * from './components/Popover'
61
+ export type { PopoverAlign, PopoverSide } from './components/Popover/types'
61
62
  export {
62
63
  dialog,
63
64
  type ConfirmArgs,
64
- type ConfirmResult,
65
65
  type DialogNamespace,
66
66
  type PromptArgs,
67
67
  type PromptField,
68
- type PromptResult,
69
68
  } from './utils/dialog'
70
- /** @deprecated Use the imperative `toast(...)` API instead. The `<Toast />` SFC will be removed in a future major. */
71
- export { default as Toast } from './components/Toast/Toast.vue'
72
69
  export { toast } from './components/Toast/toast'
73
70
  export { default as ToastProvider } from './components/Toast/ToastProvider.vue'
74
- export * from './components/Tooltip'
75
- export { default as CommandPalette } from './components/CommandPalette/CommandPalette.vue'
76
- export { default as CommandPaletteItem } from './components/CommandPalette/CommandPaletteItem.vue'
71
+
72
+ // Lists and collection views
73
+ export * from './components/ItemListRow'
74
+ // Legacy ListView family. Do not deprecate until `frappe-ui/list` reaches parity.
75
+ export * from './components/ListView'
77
76
  export { default as ListFilter } from './components/ListFilter/ListFilter.vue'
78
77
  export { default as NestedPopover } from './components/ListFilter/NestedPopover.vue'
79
- export { default as KeyboardShortcut } from './components/KeyboardShortcut.vue'
80
- export * from './components/KeyboardShortcutsModal'
81
- export * from './composables/useShortcut'
82
78
  export * from './components/Calendar'
83
- export * from './components/CircularProgressBar'
84
79
  export * from './components/Tree'
85
- export { default as FrappeUIProvider } from './components/Provider/FrappeUIProvider.vue'
80
+
81
+ // Navigation and layout
82
+ export * from './components/DesktopShell/index.ts'
83
+ export * from './components/MobileNav/index.ts'
84
+ export * from './components/MobileShell/index.ts'
85
+ export * from './components/PageHeader'
86
+ export * from './components/Rail'
87
+ export * from './components/ScrollArea'
88
+ export * from './components/SettingsDialog'
86
89
  export * from './components/Sidebar/index.ts'
87
- export { default as ConfirmDialog } from './components/ConfirmDialog.vue'
90
+ export * from './components/TabButtons'
91
+ export { default as Tabs } from './components/Tabs/Tabs.vue'
88
92
 
89
- // grid layout
90
- export { default as GridLayout } from './components/VueGridLayout/Layout.vue'
93
+ // Command and keyboard surfaces
94
+ export { default as CommandPalette } from './components/CommandPalette/CommandPalette.vue'
95
+ export { default as CommandPaletteItem } from './components/CommandPalette/CommandPaletteItem.vue'
96
+ export { default as KeyboardShortcut } from './components/KeyboardShortcut.vue'
97
+ export * from './components/KeyboardShortcutsModal'
98
+ export * from './composables/useShortcut'
91
99
 
92
- // chart components
100
+ // Deprecated component compatibility
101
+ /** @deprecated Use layout markup or domain-specific components instead. */
102
+ // @ts-expect-error Deprecated JS SFC compatibility export.
103
+ export { default as Card } from './components/Card.vue'
104
+ /** @deprecated Use `dialog.confirm(...)` instead. */
105
+ // @ts-expect-error Deprecated JS SFC compatibility export.
106
+ export { default as ConfirmDialog } from './components/ConfirmDialog.vue'
107
+ /** @deprecated Use `dialog.confirm(...)` instead. */
108
+ export { confirmDialog } from './utils/confirmDialog.js'
109
+ /** @deprecated Use lucide icon names or the `Icon` component instead. */
110
+ // @ts-expect-error Deprecated JS SFC compatibility export.
111
+ export { default as FeatherIcon } from './components/FeatherIcon.vue'
112
+ /** @deprecated Use `TextInput` or `FormControl` instead. */
113
+ // @ts-expect-error Deprecated JS SFC compatibility export.
114
+ export { default as Input } from './components/Input.vue'
115
+ /** @deprecated Use list primitives from `frappe-ui/list` or app-owned row markup instead. */
116
+ // @ts-expect-error Deprecated JS SFC compatibility export.
117
+ export { default as ListItem } from './components/ListItem.vue'
118
+ /** @deprecated Use `Select` for month picking instead. */
119
+ export * from './components/MonthPicker'
120
+ /** @deprecated Use the imperative `toast(...)` API instead. The `<Toast />` SFC will be removed in a future major. */
121
+ export { default as Toast } from './components/Toast/Toast.vue'
122
+ /** @deprecated Use `Select` with `useTheme` instead. */
123
+ export * from './components/ThemeSwitcher'
124
+ /** @deprecated Use the `frappe-ui/editor` subpath instead. */
125
+ export * from './components/TextEditor'
126
+ /** @deprecated Use extensions from `frappe-ui/editor` instead. */
127
+ export * from './components/TextEditor/extensions/image'
128
+ /** @deprecated Use extensions from `frappe-ui/editor` instead. */
129
+ export * from './components/TextEditor/extensions/suggestion'
130
+
131
+ // Charts
93
132
  export { default as AxisChart } from './components/Charts/AxisChart.vue'
94
- export { default as useAxisChartOptions } from './components/Charts/axisChartOptions'
133
+ export * from './components/CircularProgressBar'
95
134
  export { default as DonutChart } from './components/Charts/DonutChart.vue'
96
135
  export { default as ECharts } from './components/Charts/ECharts.vue'
97
136
  export { default as FunnelChart } from './components/Charts/FunnelChart.vue'
98
137
  export { default as NumberChart } from './components/Charts/NumberChart.vue'
138
+ export { default as useAxisChartOptions } from './components/Charts/axisChartOptions'
139
+
140
+ // Grid layout
141
+ export { default as GridLayout } from './components/VueGridLayout/Layout.vue'
99
142
 
100
- // directives
143
+ // Browser and responsive composables
144
+ export * from './composables/useScreenSize'
145
+ export * from './composables/useScrollContainer'
146
+
147
+ // Directives
101
148
  export { default as focusDirective } from './directives/focus'
102
149
  export { default as onOutsideClickDirective } from './directives/onOutsideClick'
103
150
  export { default as visibilityDirective } from './directives/visibility'
104
151
 
105
- // utilities
106
- export * from './components/TextEditor/extensions/image'
107
- export * from './components/TextEditor/extensions/suggestion'
108
- export { default as call, createCall } from './utils/call.js'
152
+ // Utilities
109
153
  export { dayjs, dayjsLocal } from './utils/dayjs'
110
154
  export { default as debounce } from './utils/debounce'
111
155
  export { default as fileToBase64 } from './utils/file-to-base64'
112
156
  export { default as FileUploadHandler } from './utils/fileUploadHandler'
113
- export { usePageMeta } from './utils/pageMeta'
157
+ export * from './utils/fileSize'
114
158
  export * from './utils/theme'
115
159
  export * from './utils/useFileUpload'
116
-
117
- export { getConfig, setConfig } from './utils/config'
118
- export { frappeRequest } from './utils/frappeRequest.js'
119
- export { request } from './utils/request.js'
120
- export { default as initSocket } from './utils/socketio.js'
121
-
122
- // new data-fetching composables
123
- export * from './data-fetching'
124
-
125
- // plugin
126
- export { confirmDialog } from './utils/confirmDialog.js'
127
- export { default as pageMetaPlugin } from './utils/pageMeta.js'
128
- export { default as FrappeUI } from './utils/plugin.js'
@@ -24,6 +24,10 @@ export const handlers = [
24
24
  )
25
25
  }),
26
26
 
27
+ http.get(url('/api/v2/method/network-error'), () => {
28
+ return HttpResponse.error()
29
+ }),
30
+
27
31
  http.post(url('/api/v2/method/post'), async ({ request }) => {
28
32
  const body = await request.json()
29
33
  return HttpResponse.json({
@@ -63,6 +67,10 @@ export const handlers = [
63
67
  })
64
68
  }),
65
69
 
70
+ http.get(url('/api/v2/document/InvalidDoctype'), () => {
71
+ return HttpResponse.error()
72
+ }),
73
+
66
74
  http.get(url('/api/v2/document/User/user1'), async () => {
67
75
  return HttpResponse.json({
68
76
  data: {
@@ -97,13 +97,17 @@ describe('v1 editor browser behavior', () => {
97
97
  cy.contains('button', 'Embed').should('be.visible')
98
98
  })
99
99
 
100
- it('opens the link editor near the clicked link, not at the top of the document', () => {
100
+ it('opens the link editor near the link, not at the top of the document', () => {
101
101
  mountEditor({
102
102
  topOffset: 320,
103
103
  content: '<p><a href="https://example.com">Example link</a></p>',
104
104
  })
105
105
 
106
+ // Plain click only places the caret (it no longer opens the popup); the
107
+ // link editor opens via Mod-k. A collapsed caret in the link opens it in
108
+ // view mode, which renders the href as an <a>.
106
109
  cy.contains('.ProseMirror a', 'Example link').click()
110
+ cy.get('.ProseMirror').type('{meta}k')
107
111
 
108
112
  cy.contains('a', 'https://example.com')
109
113
  .should('be.visible')
@@ -119,6 +123,7 @@ describe('v1 editor browser behavior', () => {
119
123
  })
120
124
 
121
125
  cy.contains('.ProseMirror a', 'Example link').click()
126
+ cy.get('.ProseMirror').type('{meta}k')
122
127
  cy.contains('a', 'https://example.com').should('be.visible')
123
128
 
124
129
  cy.get('.ProseMirror').click('bottomRight', { force: true })
@@ -37,7 +37,7 @@ const floatingOptions = computed(() => {
37
37
  >
38
38
  <div
39
39
  data-slot="bubble-menu"
40
- class="flex items-center gap-1 rounded border border-outline-gray-2 bg-surface-white p-1 shadow-sm"
40
+ class="flex items-center gap-1 rounded border border-outline-gray-2 bg-surface-elevation-2 p-1 shadow-sm"
41
41
  >
42
42
  <MenuItems :editor="editor" :items="items" />
43
43
  </div>
@@ -54,6 +54,39 @@ const rootAttrs = computed(() => {
54
54
  return rest
55
55
  })
56
56
 
57
+ /**
58
+ * The content-styling tokens this component owns: our default prose typography
59
+ * plus whatever the consumer passed via `class`.
60
+ */
61
+ const editorClassTokens = computed(() =>
62
+ normalizeClass([proseClass.value, attrs.class]).split(' ').filter(Boolean),
63
+ )
64
+
65
+ /**
66
+ * Apply `editorClassTokens` to the element with `classList`, adding/removing
67
+ * only the tokens we own.
68
+ *
69
+ * ProseMirror mounts directly onto `rootEl` and shares its `class` attribute:
70
+ * it adds `ProseMirror`/`tiptap` and toggles `ProseMirror-focused`. A Vue
71
+ * `:class` bound to the same element would be a second, non-surgical writer —
72
+ * each re-render replaces the whole token list, dropping ProseMirror's classes
73
+ * and silently breaking every `.ProseMirror`-scoped editor style (table borders,
74
+ * etc.). ProseMirror itself only ever adds/removes its own decoration tokens
75
+ * (see prosemirror-view `patchAttributes`), so mirroring that here — touching
76
+ * only our tokens — lets both owners coexist on one attribute.
77
+ */
78
+ let appliedTokens: string[] = []
79
+ function syncClasses() {
80
+ const el = rootEl.value
81
+ if (!el) return
82
+ const next = editorClassTokens.value
83
+ for (const token of appliedTokens) {
84
+ if (!next.includes(token)) el.classList.remove(token)
85
+ }
86
+ el.classList.add(...next)
87
+ appliedTokens = next
88
+ }
89
+
57
90
  function mountEditor(editor: Editor | null) {
58
91
  const el = rootEl.value
59
92
  if (!el) return
@@ -63,11 +96,11 @@ function mountEditor(editor: Editor | null) {
63
96
  if (!editor) return
64
97
 
65
98
  const tiptapEditor = editor as any
66
- tiptapEditor.contentComponent = instance?.ctx._
99
+ tiptapEditor.contentComponent = (instance as any)?.ctx._
67
100
  if (instance) {
68
101
  tiptapEditor.appContext = {
69
102
  ...instance.appContext,
70
- provides: instance.provides,
103
+ provides: (instance as any).provides,
71
104
  }
72
105
  }
73
106
 
@@ -85,21 +118,29 @@ function unmountEditor() {
85
118
  mountedEditor = null
86
119
  }
87
120
 
88
- onMounted(() => mountEditor(resolvedEditor.value))
121
+ onMounted(() => {
122
+ syncClasses()
123
+ mountEditor(resolvedEditor.value)
124
+ })
89
125
 
90
126
  watch(resolvedEditor, async (editor) => {
91
127
  await nextTick()
92
128
  mountEditor(editor)
93
129
  })
94
130
 
131
+ // Reactive consumer/prose classes update via our own surgical classList sync,
132
+ // not a Vue `:class` binding (which would clobber ProseMirror's classes).
133
+ watch(editorClassTokens, syncClasses)
134
+
95
135
  onBeforeUnmount(() => unmountEditor())
96
136
  </script>
97
137
 
98
138
  <template>
99
- <div
100
- ref="rootEl"
101
- data-slot="editor-content"
102
- v-bind="rootAttrs"
103
- :class="[proseClass, attrs.class]"
104
- />
139
+ <!--
140
+ No `:class` here on purpose — `rootEl` is also ProseMirror's editor element,
141
+ so its `class` attribute has two owners. Vue's `:class` is a wholesale
142
+ replace and would drop ProseMirror's classes; instead `syncClasses` manages
143
+ only our tokens via classList. See `editorClassTokens` above.
144
+ -->
145
+ <div ref="rootEl" data-slot="editor-content" v-bind="rootAttrs" />
105
146
  </template>
@@ -8,6 +8,7 @@ const props = defineProps<{
8
8
  // Optional inside <Editor> — falls back to the provided editor context.
9
9
  editor?: Editor | null
10
10
  items: MenuItem[]
11
+ buttonSize?: 'xs' | 'sm'
11
12
  }>()
12
13
 
13
14
  const editor = useResolvedEditor(() => props.editor)
@@ -15,6 +16,6 @@ const editor = useResolvedEditor(() => props.editor)
15
16
 
16
17
  <template>
17
18
  <div data-slot="fixed-menu" class="flex items-center gap-1">
18
- <MenuItems :editor="editor" :items="items" />
19
+ <MenuItems :editor="editor" :items="items" :button-size="buttonSize" />
19
20
  </div>
20
21
  </template>
@@ -37,7 +37,7 @@ const floatingOptions = computed(() => {
37
37
  >
38
38
  <div
39
39
  data-slot="floating-menu"
40
- class="flex items-center gap-1 rounded border border-outline-gray-2 bg-surface-white p-1 shadow-sm"
40
+ class="flex items-center gap-1 rounded border border-outline-gray-2 bg-surface-elevation-2 p-1 shadow-sm"
41
41
  >
42
42
  <MenuItems :editor="editor" :items="items" />
43
43
  </div>