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
@@ -0,0 +1,28 @@
1
+ <script setup>
2
+ import { Button } from 'frappe-ui'
3
+ </script>
4
+
5
+ <template>
6
+ <div class="flex w-full max-w-[1100px] items-center gap-8">
7
+ <div class="flex flex-1 items-center gap-1.5">
8
+ <Button>Lead owner</Button>
9
+ <Button icon-right="lucide-chevron-down">Status</Button>
10
+ <Button icon-right="lucide-chevron-down">Organisation</Button>
11
+ </div>
12
+ <div class="flex items-center gap-2">
13
+ <Button icon-left="lucide-eye-off">Columns</Button>
14
+ <Button icon-left="lucide-list-filter">
15
+ Filter
16
+ <template #suffix>
17
+ <span
18
+ class="inline-flex h-4.5 items-center justify-center rounded-1 bg-surface-base px-1.5 text-xs text-ink-gray-7 shadow-sm ring-1 ring-black/5"
19
+ >
20
+ 1
21
+ </span>
22
+ </template>
23
+ </Button>
24
+ <Button icon-left="lucide-arrow-up-down">Sort</Button>
25
+ <Button icon="lucide-ellipsis" />
26
+ </div>
27
+ </div>
28
+ </template>
@@ -0,0 +1,20 @@
1
+ <script setup>
2
+ import { Button } from 'frappe-ui'
3
+ </script>
4
+
5
+ <template>
6
+ <div
7
+ class="inline-flex items-center gap-3.5 rounded-6 bg-surface-base p-1.5 shadow-[0px_0px_1.5px_rgba(0,0,0,0.16),0px_2px_5px_rgba(0,0,0,0.14)]"
8
+ >
9
+ <Button variant="ghost" icon-left="lucide-x">2 selected</Button>
10
+ <div class="h-5 w-px bg-outline-gray-1" />
11
+ <div class="flex items-center gap-1">
12
+ <Button variant="ghost" icon-left="lucide-download">Download</Button>
13
+ <Button variant="ghost" icon-left="lucide-corner-up-right">Move</Button>
14
+ <Button variant="ghost" icon-left="lucide-share-2">Share</Button>
15
+ <Button variant="ghost" theme="red" icon-left="lucide-trash-2">
16
+ Delete
17
+ </Button>
18
+ </div>
19
+ </div>
20
+ </template>
@@ -0,0 +1,10 @@
1
+ <script setup>
2
+ import { Button } from 'frappe-ui'
3
+ </script>
4
+
5
+ <template>
6
+ <div class="flex w-58 flex-col items-stretch gap-2">
7
+ <Button class="w-full">Join</Button>
8
+ <Button variant="solid" class="w-full">Reschedule</Button>
9
+ </div>
10
+ </template>
@@ -1,53 +1,59 @@
1
1
  import { type RouterLinkProps } from 'vue-router'
2
- import { type Component } from 'vue'
2
+ import { type Component, type ExtractPublicPropTypes, type PropType } from 'vue'
3
3
 
4
- type Theme = 'gray' | 'blue' | 'green' | 'red'
5
- type Size = 'sm' | 'md' | 'md' | 'lg' | 'xl' | '2xl'
6
- type Variant = 'solid' | 'subtle' | 'outline' | 'ghost'
4
+ export type Theme = 'gray' | 'blue' | 'green' | 'red'
5
+ export type Size = 'xs' | 'sm' | 'md' | 'lg'
6
+ export type Variant = 'solid' | 'subtle' | 'outline' | 'ghost'
7
7
 
8
- export interface ButtonProps {
9
- /** Visual color theme of the button */
10
- theme?: Theme
8
+ const iconProp = {
9
+ type: [String, Object, Function] as PropType<string | Component>,
10
+ default: undefined,
11
+ }
11
12
 
13
+ /**
14
+ * Runtime prop definitions — the single source of truth for the button's props.
15
+ * `Button.vue` spreads these into `defineComponent`, and the public `ButtonProps`
16
+ * type is derived from them, so the runtime and the type can never drift apart.
17
+ */
18
+ export const buttonProps = {
19
+ /** Visual color theme of the button */
20
+ theme: { type: String as PropType<Theme>, default: 'gray' },
12
21
  /** Controls the button size */
13
- size?: Size
14
-
22
+ size: { type: String as PropType<Size>, default: 'sm' },
15
23
  /** Visual style of the button */
16
- variant?: Variant
17
-
24
+ variant: { type: String as PropType<Variant>, default: 'subtle' },
18
25
  /** Text label displayed inside the button */
19
- label?: string
20
-
26
+ label: { type: String, default: undefined },
21
27
  /** Icon shown when no left or right icon is specified */
22
- icon?: string | Component
23
-
28
+ icon: iconProp,
24
29
  /** Icon shown before the label */
25
- iconLeft?: string | Component
26
-
30
+ iconLeft: iconProp,
27
31
  /** Icon shown after the label */
28
- iconRight?: string | Component
29
-
32
+ iconRight: iconProp,
30
33
  /** Tooltip text shown on hover */
31
- tooltip?: string
32
-
34
+ tooltip: { type: String, default: undefined },
33
35
  /** Shows a loading state and disables interaction */
34
- loading?: boolean
35
-
36
+ loading: { type: Boolean, default: false },
36
37
  /** Text shown while the button is loading */
37
- loadingText?: string
38
-
38
+ loadingText: { type: String, default: undefined },
39
39
  /** Disables the button */
40
- disabled?: boolean
41
-
40
+ disabled: { type: Boolean, default: false },
42
41
  /** Router destination when used as a link */
43
- route?: RouterLinkProps['to']
44
-
42
+ route: {
43
+ type: [String, Object] as PropType<RouterLinkProps['to']>,
44
+ default: undefined,
45
+ },
45
46
  /** External link URL */
46
- link?: string
47
-
47
+ link: { type: String, default: undefined },
48
48
  /** Native button type */
49
- type?: 'button' | 'submit' | 'reset'
49
+ type: {
50
+ type: String as PropType<'button' | 'submit' | 'reset'>,
51
+ default: 'button',
52
+ },
50
53
  }
51
54
 
55
+ /** Public prop types for `<Button>`. Derived from {@link buttonProps}. */
56
+ export type ButtonProps = ExtractPublicPropTypes<typeof buttonProps>
57
+
52
58
  /** Combined theme and variant key */
53
59
  export type ThemeVariant = `${Theme}-${Variant}`
@@ -8,33 +8,34 @@
8
8
  {
9
9
  name: 'events',
10
10
  description: '',
11
- required: false,
12
- type: 'Record<string, any>',
11
+ required: true,
12
+ type: 'CalendarEvent[]',
13
13
  default: '[]'
14
14
  },
15
15
  {
16
16
  name: 'config',
17
17
  description: '',
18
18
  required: false,
19
- type: 'Record<string, any>'
19
+ type: 'Partial<CalendarConfig>',
20
+ default: '{}'
20
21
  },
21
22
  {
22
23
  name: 'onClick',
23
24
  description: '',
24
25
  required: false,
25
- type: 'Function'
26
+ type: '((data: { e: MouseEvent; calendarEvent: CalendarEvent; }) => void)'
26
27
  },
27
28
  {
28
29
  name: 'onDblClick',
29
30
  description: '',
30
31
  required: false,
31
- type: 'Function'
32
+ type: '((data: { e: MouseEvent | null; calendarEvent: CalendarEvent; }) => void)'
32
33
  },
33
34
  {
34
35
  name: 'onCellClick',
35
36
  description: '',
36
37
  required: false,
37
- type: 'Function'
38
+ type: '((data: CalendarCellClickData) => void)'
38
39
  }
39
40
  ]
40
41
 
@@ -42,12 +43,12 @@
42
43
  {
43
44
  name: 'header',
44
45
  description: '',
45
- type: '{ currentMonthYear: any; currentYear: number; currentMonth: number; enabledModes: { label: string; v'
46
+ type: '{ currentMonthYear: string; currentYear: number; currentMonth: number; enabledModes: CalendarActionO'
46
47
  },
47
48
  {
48
49
  name: 'event-popover-content',
49
50
  description: '',
50
- type: 'any'
51
+ type: '{ calendarEvent: { [x: string]: unknown; id?: string | number | undefined; name?: string | number | '
51
52
  },
52
53
  {
53
54
  name: 'daily-header',
@@ -60,30 +61,29 @@
60
61
  {
61
62
  name: 'delete',
62
63
  description: '',
63
- type: 'any[]'
64
+ type: '[eventID: string | number | undefined]'
64
65
  },
65
66
  {
66
67
  name: 'create',
67
68
  description: '',
68
- type: 'any[]'
69
+ type: '[event: CalendarEvent]'
69
70
  },
70
71
  {
71
72
  name: 'update',
72
73
  description: '',
73
- type: 'any[]'
74
+ type: '[event: CalendarEvent]'
74
75
  },
75
76
  {
76
77
  name: 'rangeChange',
77
78
  description: '',
78
- type: 'any[]'
79
+ type: '[payload: { view: CalendarMode; startDate: string; endDate: string; }]'
79
80
  }
80
81
  ]
81
82
  </script>
82
83
  ## API Reference
83
84
 
84
- <PropsTable name="Calendar" :data="propsData"/>
85
-
86
- <SlotsTable :data="slotsData"/>
85
+ <PropsTable name="Calendar" :data="propsData"/>
87
86
 
88
- <EmitsTable :data="emitsData"/>
87
+ <SlotsTable :data="slotsData"/>
89
88
 
89
+ <EmitsTable :data="emitsData"/>
@@ -28,7 +28,7 @@
28
28
  <template #target="{ togglePopover }">
29
29
  <Button
30
30
  variant="ghost"
31
- class="text-lg font-medium text-ink-gray-7"
31
+ class="text-lg-medium text-ink-gray-7"
32
32
  :label="currentMonthYear"
33
33
  iconRight="lucide-chevron-down"
34
34
  @click="togglePopover"
@@ -41,9 +41,17 @@
41
41
  <div class="flex gap-x-1">
42
42
  <!-- Increment and Decrement Button-->
43
43
 
44
- <Button @click="decrement" variant="ghost" icon="lucide-chevron-left" />
44
+ <Button
45
+ @click="decrement"
46
+ variant="ghost"
47
+ icon="lucide-chevron-left"
48
+ />
45
49
  <Button label="Today" @click="setCalendarDate()" variant="ghost" />
46
- <Button @click="increment" variant="ghost" icon="lucide-chevron-right" />
50
+ <Button
51
+ @click="increment"
52
+ variant="ghost"
53
+ icon="lucide-chevron-right"
54
+ />
47
55
 
48
56
  <!-- View change button, default is months or can be set via props! -->
49
57
  <TabButtons
@@ -103,7 +111,7 @@
103
111
  />
104
112
  </div>
105
113
  </template>
106
- <script setup>
114
+ <script setup lang="ts">
107
115
  import {
108
116
  computed,
109
117
  onMounted,
@@ -112,6 +120,7 @@ import {
112
120
  ref,
113
121
  watch,
114
122
  nextTick,
123
+ type Component,
115
124
  } from 'vue'
116
125
  import { Button } from '../Button'
117
126
  import { TabButtons } from '../TabButtons'
@@ -132,34 +141,33 @@ import CalendarWeekly from './CalendarWeekly.vue'
132
141
  import CalendarDaily from './CalendarDaily.vue'
133
142
  import NewEventModal from './NewEventModal.vue'
134
143
  import useEventModal from './composables/useEventModal'
135
- import { isAnyPopoverOpen } from './useEventBase.js'
136
-
137
- const props = defineProps({
138
- events: {
139
- type: Object,
140
- required: false,
141
- default: [],
142
- },
143
- config: {
144
- type: Object,
145
- },
146
- onClick: {
147
- type: Function,
148
- required: false,
149
- },
150
- onDblClick: {
151
- type: Function,
152
- required: false,
153
- },
154
- onCellClick: {
155
- type: Function,
156
- required: false,
157
- },
144
+ import { isAnyPopoverOpen } from './useEventBase'
145
+ import {
146
+ ACTIVE_VIEW_KEY,
147
+ CALENDAR_ACTIONS_KEY,
148
+ CALENDAR_CONFIG_KEY,
149
+ type CalendarCellClickData,
150
+ type CalendarConfig,
151
+ type CalendarEvent,
152
+ type CalendarMode,
153
+ type CalendarPublicProps,
154
+ } from './types'
155
+
156
+ const props = withDefaults(defineProps<CalendarPublicProps>(), {
157
+ events: () => [],
158
+ config: () => ({}),
158
159
  })
159
160
 
160
- const emit = defineEmits(['create', 'update', 'delete', 'rangeChange'])
161
+ const emit = defineEmits<{
162
+ create: [event: CalendarEvent]
163
+ update: [event: CalendarEvent]
164
+ delete: [eventID: CalendarEvent['id']]
165
+ rangeChange: [
166
+ payload: { view: CalendarMode; startDate: string; endDate: string },
167
+ ]
168
+ }>()
161
169
 
162
- const defaultConfig = {
170
+ const defaultConfig: CalendarConfig = {
163
171
  scrollToHour: 15,
164
172
  disableModes: [],
165
173
  defaultMode: 'Month',
@@ -172,10 +180,15 @@ const defaultConfig = {
172
180
  weekends: ['sunday'],
173
181
  }
174
182
 
175
- const overrideConfig = { ...defaultConfig, ...props.config }
176
- let activeView = ref(overrideConfig.defaultMode)
183
+ const overrideConfig: CalendarConfig = { ...defaultConfig, ...props.config }
184
+ let activeView = ref<CalendarMode>(overrideConfig.defaultMode)
177
185
 
178
- function updateActiveView(value, d, isPreviousMonth, isNextMonth) {
186
+ function updateActiveView(
187
+ value: CalendarMode,
188
+ d?: Date,
189
+ isPreviousMonth?: boolean,
190
+ isNextMonth?: boolean,
191
+ ) {
179
192
  activeView.value = value
180
193
  if (value == 'Day' && d) {
181
194
  date.value = findIndexOfDate(d)
@@ -189,14 +202,14 @@ function updateActiveView(value, d, isPreviousMonth, isNextMonth) {
189
202
 
190
203
  const selectedMonthDate = ref(dayjs().format('YYYY-MM-DD'))
191
204
 
192
- function onMonthYearChange(val = '') {
205
+ function onMonthYearChange(val: string | Date = '') {
193
206
  const d = dayjs(val)
194
207
  selectedMonthDate.value = d.format('YYYY-MM-DD')
195
208
 
196
209
  setCalendarDate(selectedMonthDate.value)
197
210
  }
198
211
 
199
- function syncSelectedMonth(year, month) {
212
+ function syncSelectedMonth(year: number, month: number) {
200
213
  // Keep same day if possible; otherwise clamp to last day
201
214
  if (typeof year === 'number' && typeof month === 'number') {
202
215
  const currentDay = dayjs(selectedMonthDate.value).date()
@@ -222,11 +235,12 @@ onMounted(() => {
222
235
  onUnmounted(() => {
223
236
  window.removeEventListener('keydown', handleShortcuts)
224
237
  })
225
- function handleShortcuts(e) {
238
+ function handleShortcuts(e: KeyboardEvent) {
239
+ const target = e.target as HTMLElement | null
226
240
  if (
227
- e.target.tagName === 'INPUT' ||
228
- e.target.tagName === 'TEXTAREA' ||
229
- e.target.isContentEditable
241
+ target?.tagName === 'INPUT' ||
242
+ target?.tagName === 'TEXTAREA' ||
243
+ target?.isContentEditable
230
244
  ) {
231
245
  return
232
246
  }
@@ -251,8 +265,8 @@ function handleShortcuts(e) {
251
265
  }
252
266
  }
253
267
 
254
- provide('activeView', activeView)
255
- provide('config', overrideConfig)
268
+ provide(ACTIVE_VIEW_KEY, activeView)
269
+ provide(CALENDAR_CONFIG_KEY, overrideConfig)
256
270
 
257
271
  watch(activeView, (value) => {
258
272
  if (value === 'Week') {
@@ -281,7 +295,7 @@ const parseEvents = computed(() => {
281
295
  }) || []
282
296
  )
283
297
  })
284
- const events = ref(parseEvents.value)
298
+ const events = ref<CalendarEvent[]>(parseEvents.value)
285
299
 
286
300
  watch(
287
301
  () => props.events,
@@ -302,7 +316,7 @@ events.value.forEach((event) => {
302
316
 
303
317
  const { showEventModal, newEvent, openNewEventModal } = useEventModal()
304
318
 
305
- provide('calendarActions', {
319
+ provide(CALENDAR_ACTIONS_KEY, {
306
320
  createNewEvent,
307
321
  updateEventState,
308
322
  deleteEvent,
@@ -312,42 +326,49 @@ provide('calendarActions', {
312
326
  })
313
327
 
314
328
  // CRUD actions on an event
315
- function createNewEvent(event) {
329
+ function createNewEvent(event: CalendarEvent) {
316
330
  events.value.push(event)
317
331
  event.fromDateTime = event.fromDate + ' ' + event.fromTime
318
332
  event.toDateTime = event.toDate + ' ' + event.toTime
319
333
  emit('create', event)
320
334
  }
321
335
 
322
- function updateEventState(event) {
336
+ function updateEventState(event: CalendarEvent) {
323
337
  const eventID = event.id
324
338
  let eventIndex = events.value.findIndex((e) => e.id === eventID)
325
339
  event.fromDateTime = event.fromDate + ' ' + event.fromTime
326
340
  event.toDateTime = event.toDate + ' ' + event.toTime
327
- events.value[eventIndex] = event
341
+ if (eventIndex >= 0) {
342
+ events.value[eventIndex] = event
343
+ }
328
344
  emit('update', event)
329
345
  }
330
346
 
331
- function deleteEvent(eventID) {
347
+ function deleteEvent(eventID: CalendarEvent['id']) {
332
348
  // Delete event
333
349
  const eventIndex = events.value.findIndex((event) => event.id === eventID)
334
- events.value.splice(eventIndex, 1)
350
+ if (eventIndex >= 0) events.value.splice(eventIndex, 1)
335
351
  emit('delete', eventID)
336
352
  }
337
353
 
338
- function openModal(data) {
354
+ function openModal(data: CalendarCellClickData) {
339
355
  const { e, view, date, time, isFullDay } = data
340
356
  const config = overrideConfig.isEditMode
341
357
  openNewEventModal(e, view, date, config, time, isFullDay)
342
358
  }
343
359
 
344
- function handleCellClick(e, date, time = '', isFullDay = false) {
360
+ function handleCellClick(
361
+ e: MouseEvent,
362
+ date: Date | string,
363
+ time = '',
364
+ isFullDay = false,
365
+ ) {
345
366
  if (isAnyPopoverOpen.value) {
346
- isAnyPopoverOpen.value = false
367
+ isAnyPopoverOpen.value = false
347
368
  return
348
369
  }
349
370
 
350
- const data = {
371
+ const data: CalendarCellClickData = {
351
372
  e,
352
373
  view: activeView.value,
353
374
  date,
@@ -362,8 +383,14 @@ function handleCellClick(e, date, time = '', isFullDay = false) {
362
383
  openModal(data)
363
384
  }
364
385
 
386
+ type CalendarActionOption = {
387
+ label: CalendarMode
388
+ value: CalendarMode
389
+ iconLeft: Component
390
+ }
391
+
365
392
  // Calendar View Options
366
- const actionOptions = [
393
+ const actionOptions: CalendarActionOption[] = [
367
394
  { label: 'Day', value: 'Day', iconLeft: DayIcon },
368
395
  { label: 'Week', value: 'Week', iconLeft: WeekIcon },
369
396
  { label: 'Month', value: 'Month', iconLeft: MonthIcon },
@@ -383,7 +410,7 @@ let currentMonthDates = computed(() => {
383
410
 
384
411
  let datesInWeeks = computed(() => {
385
412
  let dates = [...currentMonthDates.value]
386
- let datesInWeeks = []
413
+ let datesInWeeks: Date[][] = []
387
414
  while (dates.length) {
388
415
  let week = dates.splice(0, 7)
389
416
  datesInWeeks.push(week)
@@ -391,7 +418,8 @@ let datesInWeeks = computed(() => {
391
418
  return datesInWeeks
392
419
  })
393
420
 
394
- function findCurrentWeek(date) {
421
+ function findCurrentWeek(date?: Date) {
422
+ if (!date) return 0
395
423
  return datesInWeeks.value.findIndex((week) =>
396
424
  week.find(
397
425
  (d) =>
@@ -410,7 +438,7 @@ let date = ref(
410
438
  )
411
439
  let selectedDay = computed(() => currentMonthDates.value[date.value])
412
440
 
413
- function computeCurrentDay() {
441
+ function computeCurrentDay(): number | null {
414
442
  if (activeView.value === 'Week') {
415
443
  const weekDates = datesInWeeks.value[week.value] || []
416
444
  return weekDates[0] ? weekDates[0].getDate() : null
@@ -438,7 +466,7 @@ watch(currentDay, (newVal) => {
438
466
  setCalendarDate(target)
439
467
  })
440
468
 
441
- function updateCurrentDate(d) {
469
+ function updateCurrentDate(d: Date) {
442
470
  activeView.value = 'Day'
443
471
  date.value = findIndexOfDate(d)
444
472
  week.value = findCurrentWeek(d)
@@ -454,13 +482,13 @@ function decrement() {
454
482
  syncSelectedMonth(currentYear.value, currentMonth.value)
455
483
  }
456
484
 
457
- const incrementClickEvents = {
485
+ const incrementClickEvents: Record<CalendarMode, () => void> = {
458
486
  Month: incrementMonth,
459
487
  Week: incrementWeek,
460
488
  Day: incrementDay,
461
489
  }
462
490
 
463
- const decrementClickEvents = {
491
+ const decrementClickEvents: Record<CalendarMode, () => void> = {
464
492
  Month: decrementMonth,
465
493
  Week: decrementWeek,
466
494
  Day: decrementDay,
@@ -581,11 +609,11 @@ function decrementDay() {
581
609
  }
582
610
  }
583
611
 
584
- function firstInMonth(weekDates, month) {
612
+ function firstInMonth(weekDates: Date[], month: number) {
585
613
  return weekDates.find((d) => d.getMonth() === month) || weekDates[0]
586
614
  }
587
615
 
588
- function findLastDateOfMonth(month, year) {
616
+ function findLastDateOfMonth(month: number, year: number) {
589
617
  let inputDate = new Date(year, month + 1, 0)
590
618
  let lastDateIndex = currentMonthDates.value.findIndex(
591
619
  (date) => new Date(date).toDateString() === inputDate.toDateString(),
@@ -593,7 +621,7 @@ function findLastDateOfMonth(month, year) {
593
621
  return lastDateIndex
594
622
  }
595
623
 
596
- function findFirstDateOfMonth(month, year) {
624
+ function findFirstDateOfMonth(month: number, year: number) {
597
625
  let inputDate = new Date(year, month, 1)
598
626
  let firstDateIndex = currentMonthDates.value.findIndex(
599
627
  (date) => new Date(date).toDateString() === inputDate.toDateString(),
@@ -601,7 +629,7 @@ function findFirstDateOfMonth(month, year) {
601
629
  return firstDateIndex
602
630
  }
603
631
 
604
- function findIndexOfDate(date) {
632
+ function findIndexOfDate(date: Date | string) {
605
633
  return currentMonthDates.value.findIndex(
606
634
  (d) => new Date(d).toDateString() === new Date(date).toDateString(),
607
635
  )
@@ -635,12 +663,13 @@ const currentMonthYear = computed(() => {
635
663
  : `${short[first.month]} ${first.year} - ${short[last.month]} ${last.year}` // Cross-year span
636
664
  })
637
665
 
638
- function isCurrentMonthDate(date) {
666
+ function isCurrentMonthDate(date?: Date) {
667
+ if (!date) return false
639
668
  date = new Date(date)
640
669
  return date.getMonth() === currentMonth.value
641
670
  }
642
671
 
643
- function setCalendarDate(d) {
672
+ function setCalendarDate(d?: Date | string) {
644
673
  const dt = d ? new Date(d) : new Date()
645
674
  if (dt.toString() === 'Invalid Date') return
646
675
  currentYear.value = dt.getFullYear()
@@ -660,28 +689,26 @@ function setCalendarDate(d) {
660
689
  }
661
690
 
662
691
  function getVisibleRange() {
663
- const toDateString = (date) => (date ? dayjs(date).format('YYYY-MM-DD') : '')
664
-
665
692
  if (activeView.value === 'Day') {
666
693
  const day = selectedDay.value
667
694
  if (!day) return null
668
695
  const start = dayjs(day).startOf('day')
669
696
  const end = dayjs(day).endOf('day')
670
697
  return {
671
- startDate: toDateString(start),
672
- endDate: toDateString(end),
698
+ startDate: start.format('YYYY-MM-DD'),
699
+ endDate: end.format('YYYY-MM-DD'),
673
700
  }
674
701
  }
675
702
 
676
703
  if (activeView.value === 'Week') {
677
704
  const weekDates = datesInWeeks.value[week.value] || []
678
705
  if (!weekDates.length) return null
679
- const orderedWeek = [...weekDates].sort((a, b) => a - b)
706
+ const orderedWeek = [...weekDates].sort((a, b) => a.getTime() - b.getTime())
680
707
  const start = dayjs(orderedWeek[0]).startOf('day')
681
708
  const end = dayjs(orderedWeek[orderedWeek.length - 1]).endOf('day')
682
709
  return {
683
- startDate: toDateString(start),
684
- endDate: toDateString(end),
710
+ startDate: start.format('YYYY-MM-DD'),
711
+ endDate: end.format('YYYY-MM-DD'),
685
712
  }
686
713
  }
687
714
 
@@ -692,8 +719,8 @@ function getVisibleRange() {
692
719
  new Date(currentYear.value, currentMonth.value + 1, 0),
693
720
  ).endOf('day')
694
721
  return {
695
- startDate: toDateString(start),
696
- endDate: toDateString(end),
722
+ startDate: start.format('YYYY-MM-DD'),
723
+ endDate: end.format('YYYY-MM-DD'),
697
724
  }
698
725
  }
699
726