@leavepulse/ui 0.71.2 → 0.72.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/dist/assets/{LpKeys-BxRhfQda.css → LpKeys-C5VMcBOW.css} +10 -5
  2. package/dist/assets/LpTabs-CDchzoRL.css +18 -0
  3. package/dist/chunks/{ContextMenuItems-eS7qx9gD.js → ContextMenuItems-BXumicbh.js} +1 -1
  4. package/dist/chunks/{DropzoneLinkField-DkFhdfEJ.js → DropzoneLinkField-DpOB20Lx.js} +2 -2
  5. package/dist/chunks/{FieldWrapper-YzbvvC3M.js → FieldWrapper-DHhRxO5G.js} +1 -1
  6. package/dist/chunks/{LayoutCanvas-Ba4A9QC5.js → LayoutCanvas-CNOAUk7D.js} +1 -1
  7. package/dist/chunks/{LayoutNode-CTTTLMDM.js → LayoutNode-DF5BMN0J.js} +1 -1
  8. package/dist/chunks/{LpActionBar-B7anGlkI.js → LpActionBar-BqicINE_.js} +3 -3
  9. package/dist/chunks/{LpAddressInput-Bu6ws3Fp.js → LpAddressInput-CkbKLufb.js} +7 -7
  10. package/dist/chunks/{LpAlert-BHi7ARqu.js → LpAlert-BigMdAbu.js} +3 -3
  11. package/dist/chunks/{LpAppShell-C5YW5pI7.js → LpAppShell-DIMy-vjP.js} +68 -18
  12. package/dist/chunks/{LpAutocomplete-DDqe2M5g.js → LpAutocomplete-DOu7FN5P.js} +2 -2
  13. package/dist/chunks/{LpAvatar-DqfKCIdr.js → LpAvatar-Cg6Az3wz.js} +1 -1
  14. package/dist/chunks/{LpBadge-C8fKEmTF.js → LpBadge-Huo8EKew.js} +3 -3
  15. package/dist/chunks/LpBottomNav-BZIpahzA.js +89 -0
  16. package/dist/chunks/{LpBreadcrumbs-DhcoStFa.js → LpBreadcrumbs-DGtpBhWt.js} +3 -3
  17. package/dist/chunks/{LpButton-BQDAFXBd.js → LpButton-CW34A1e4.js} +1 -1
  18. package/dist/chunks/{LpCalendar-NmrA47J9.js → LpCalendar-CuoWks-0.js} +1 -1
  19. package/dist/chunks/{LpCard-CqKLnEhl.js → LpCard-B0sFXQzc.js} +1 -1
  20. package/dist/chunks/{LpCheckbox-BoOuLnGB.js → LpCheckbox-iaD63DEF.js} +2 -2
  21. package/dist/chunks/{LpCodeBlock-Czu-fq1M.js → LpCodeBlock-CFFa_pJb.js} +2 -2
  22. package/dist/chunks/{LpCodeDisplay-C9pIMF2R.js → LpCodeDisplay-CFmGMAmP.js} +6 -6
  23. package/dist/chunks/{LpColorPicker-Ee1DZiRd.js → LpColorPicker-1y1QJHZR.js} +56 -28
  24. package/dist/chunks/{LpConfirmDialog-i15pulMT.js → LpConfirmDialog-BDystNtm.js} +3 -3
  25. package/dist/chunks/{LpConfirmHost-D0oGavtd.js → LpConfirmHost-oOsxJHfQ.js} +1 -1
  26. package/dist/chunks/{LpContextMenu-DXpFJjlO.js → LpContextMenu-rx2tCjwk.js} +2 -2
  27. package/dist/chunks/{LpCopyButton-Dmq7DmFw.js → LpCopyButton-BNcGbVXF.js} +2 -2
  28. package/dist/chunks/{LpCountdown-CXrEK0ev.js → LpCountdown-Cak7cq3X.js} +3 -3
  29. package/dist/chunks/{LpDataList-CFPtSsBB.js → LpDataList-B6Meb4M9.js} +3 -3
  30. package/dist/chunks/{LpDatePicker-cC9K-Pk8.js → LpDatePicker-CA0QTfBC.js} +4 -4
  31. package/dist/chunks/{LpDateRangePicker-BVQKPbvo.js → LpDateRangePicker-u3J51xXk.js} +2 -2
  32. package/dist/chunks/{LpDisclosure-hRnX3FWL.js → LpDisclosure-Cpa7Hc5T.js} +1 -1
  33. package/dist/chunks/{LpDrawer-u4rxnuR-.js → LpDrawer-RRamxbLV.js} +1 -1
  34. package/dist/chunks/{LpDropdownMenu-BgZ0Z_Im.js → LpDropdownMenu-Dl7Z4ZhS.js} +2 -2
  35. package/dist/chunks/{LpEditable-CjxuOVh_.js → LpEditable-BNogo5DL.js} +5 -5
  36. package/dist/chunks/{LpEmptyState-CKFTtQgJ.js → LpEmptyState-EQHiRYhG.js} +7 -3
  37. package/dist/chunks/{LpFieldNotice-CPI8EwtU.js → LpFieldNotice-CzQ2_5rQ.js} +1 -1
  38. package/dist/chunks/{LpFileTree-BH0gNlSJ.js → LpFileTree-CHgtVh14.js} +2 -2
  39. package/dist/chunks/{LpFileTreeNode-gPVB1oXM.js → LpFileTreeNode-LqHgHd3B.js} +5 -5
  40. package/dist/chunks/{LpFormField-gRASfyj2.js → LpFormField-CC57DdTi.js} +2 -2
  41. package/dist/chunks/{LpGauge-DFdt33x8.js → LpGauge-BO1PYYqD.js} +2 -2
  42. package/dist/chunks/{LpHintLayer-C2asBIfs.js → LpHintLayer-CvAj4aa6.js} +2 -2
  43. package/dist/chunks/{LpHints-CNZQ76JV.js → LpHints-BtRvHQQ0.js} +3 -3
  44. package/dist/chunks/{LpIcon-DkP-9mzK.js → LpIcon--5WSb3jJ.js} +1 -1
  45. package/dist/chunks/{LpInfraNode-yTh4-5qa.js → LpInfraNode-CxngdQAG.js} +2 -2
  46. package/dist/chunks/{LpInput-2H-5ILOB.js → LpInput-DqmL-438.js} +2 -2
  47. package/dist/chunks/{LpLightbox-lAt5uIfx.js → LpLightbox-7YP6zSDm.js} +3 -3
  48. package/dist/chunks/{LpLoader-DjJEX8hL.js → LpLoader-CUo1MX_0.js} +1 -1
  49. package/dist/chunks/{LpLogViewer-x78YfhJf.js → LpLogViewer-DQOIsnZ1.js} +6 -6
  50. package/dist/chunks/{LpMapPicker-Dp5RSCi9.js → LpMapPicker-Dm3vJHN2.js} +2 -2
  51. package/dist/chunks/{LpMediaGallery-D92oJfY_.js → LpMediaGallery-znEbvIEo.js} +3 -3
  52. package/dist/chunks/{LpModal-CpH0bNo7.js → LpModal-BnjZ2iem.js} +1 -1
  53. package/dist/chunks/{LpModalNav-Cuna8c_3.js → LpModalNav-CH1UE9Ch.js} +4 -4
  54. package/dist/chunks/{LpNotificationBell-BdUQqZhs.js → LpNotificationBell-CrywodQ_.js} +8 -8
  55. package/dist/chunks/{LpNumberField-DZY3Z670.js → LpNumberField-e0IBkWU1.js} +1 -1
  56. package/dist/chunks/{LpNumberFlow-Dwb9MV1A.js → LpNumberFlow-CcxEGUy0.js} +4 -2
  57. package/dist/chunks/{LpPagination-DbeACavM.js → LpPagination-BIIiYHXR.js} +1 -1
  58. package/dist/chunks/{LpPaletteTheme-DkikZ362.js → LpPaletteTheme-BzHBh-mN.js} +4 -4
  59. package/dist/chunks/{LpPasswordInput-BzAZsf5V.js → LpPasswordInput-DVgRgTVx.js} +2 -2
  60. package/dist/chunks/{LpPhoneInput-BMpd-0QR.js → LpPhoneInput-CETEp5W7.js} +2 -2
  61. package/dist/chunks/{LpPie-C1uIUFxu.js → LpPie-BjDbeytx.js} +6 -6
  62. package/dist/chunks/{LpPipeline-zjEM1Lwc.js → LpPipeline-zZUj7I6K.js} +4 -4
  63. package/dist/chunks/{LpProgress-WNaH4emv.js → LpProgress-rOlyafqp.js} +1 -1
  64. package/dist/chunks/{LpQuota-Cz9PvklM.js → LpQuota-B12yijdB.js} +3 -3
  65. package/dist/chunks/{LpRadioGroup-CsXeV9Ct.js → LpRadioGroup-ggaPL92T.js} +1 -1
  66. package/dist/chunks/{LpRangeCalendar-l-0nSFmY.js → LpRangeCalendar-CYYUYqJ7.js} +1 -1
  67. package/dist/chunks/{LpRelativeTime-UM8EkfrN.js → LpRelativeTime-DwgCb5-8.js} +1 -1
  68. package/dist/chunks/{LpRepeater-OvzByE5L.js → LpRepeater-BQB0twJ5.js} +3 -3
  69. package/dist/chunks/LpRollingText-B54Pje7P.js +86 -0
  70. package/dist/chunks/{LpScramble-TDO5Kdou.js → LpScramble-DbQyBjUY.js} +1 -1
  71. package/dist/chunks/{LpSecretField-DwQiPOko.js → LpSecretField-uoD6Fngf.js} +7 -7
  72. package/dist/chunks/{LpSection-DcQsieHG.js → LpSection-DFK_uoJE.js} +1 -1
  73. package/dist/chunks/{LpSegmented-D2VST0o3.js → LpSegmented-CeACsMMA.js} +4 -2
  74. package/dist/chunks/{LpSelect-D3pRJfRY.js → LpSelect-Cxq4yBGd.js} +3 -3
  75. package/dist/chunks/LpShift-C-UGuKMN.js +171 -0
  76. package/dist/chunks/LpSidebar-DXdbvgM6.js +494 -0
  77. package/dist/chunks/LpSidebarNav-CE6CVCb0.js +367 -0
  78. package/dist/chunks/LpSidebarRow-CF9VFZ2w.js +304 -0
  79. package/dist/chunks/{LpStat-Dzn6WFzi.js → LpStat-CjpXrC8R.js} +6 -4
  80. package/dist/chunks/{LpStatus-BQU1TUsv.js → LpStatus-g-8z9b_u.js} +3 -3
  81. package/dist/chunks/{LpStepMark-CXa7DJy_.js → LpStepMark-DU7xalwW.js} +3 -3
  82. package/dist/chunks/{LpStepper-C9RM_yTG.js → LpStepper-CbRXiXNs.js} +1 -1
  83. package/dist/chunks/{LpSwap-DzE6M3Mg.js → LpSwap-Xi4j9PR_.js} +1 -1
  84. package/dist/chunks/{LpSwitch-bGZxUDSx.js → LpSwitch-BWcXEahf.js} +1 -1
  85. package/dist/chunks/LpTabFace-CG0VqD8I.js +77 -0
  86. package/dist/chunks/{LpTableFilter-CTZMqFDU.js → LpTableFilter-CYtK9GsF.js} +3 -3
  87. package/dist/chunks/{LpTagsInput-DrjmrOge.js → LpTagsInput-D1RzCwb5.js} +5 -5
  88. package/dist/chunks/{LpTextarea-BbYqmG1S.js → LpTextarea-MdIzNTjw.js} +32 -7
  89. package/dist/chunks/{useTheme-BOV_-AiY.js → LpThemeProvider-8MG6yqU9.js} +66 -1
  90. package/dist/chunks/{LpThemeStudio-IupHqP0x.js → LpThemeStudio-B0Kk1bX0.js} +138 -104
  91. package/dist/chunks/LpThemeStudioSection-B7bt8Iyg.js +32 -0
  92. package/dist/chunks/{LpThemeSwitcher-DarPHuX8.js → LpThemeSwitcher-CI4I7ygL.js} +6 -6
  93. package/dist/chunks/{LpTimeField-DQ8WvPr2.js → LpTimeField-BawSVsmt.js} +1 -1
  94. package/dist/chunks/{LpToaster-BTTl_wuy.js → LpToaster-C-P1nmMS.js} +2 -2
  95. package/dist/chunks/{LpTopologyCanvas-Cq-MiJwo.js → LpTopologyCanvas-CbEZhsP1.js} +1 -1
  96. package/dist/chunks/{LpTour-BgCfNlaW.js → LpTour-DRyzgpjt.js} +1 -1
  97. package/dist/chunks/{LpTruncate-TcqfkyJM.js → LpTruncate-4WvCWqnW.js} +1 -1
  98. package/dist/chunks/{LpUptimeBar-BbhVTPnL.js → LpUptimeBar-B2LNSNxs.js} +4 -4
  99. package/dist/chunks/{MenuTitle-Dab3EGOp.js → MenuTitle-BmCNNTKH.js} +1 -1
  100. package/dist/chunks/{OptionContent-DPzNsybd.js → OptionContent-22UT8zLn.js} +1 -1
  101. package/dist/chunks/{PickerField-DwLw7j0L.js → PickerField-Bfh8id3d.js} +2 -2
  102. package/dist/chunks/{RevealToggle-BVFM_FAU.js → RevealToggle-jBLJwVwO.js} +2 -2
  103. package/dist/chunks/{TourCard--2IfgnUU.js → TourCard-BOBcGbEo.js} +5 -5
  104. package/dist/chunks/{icons-CLu1iR1j.js → icons-DMITlfw5.js} +1 -1
  105. package/dist/component-names.d.ts +1 -1
  106. package/dist/components/ContextMenuItems.vue.js +1 -1
  107. package/dist/components/DropzoneLinkField.vue.js +1 -1
  108. package/dist/components/FieldWrapper.vue.js +1 -1
  109. package/dist/components/LayoutCanvas.vue.js +1 -1
  110. package/dist/components/LayoutNode.vue.js +1 -1
  111. package/dist/components/LpActionBar.vue.js +1 -1
  112. package/dist/components/LpAddressInput.vue.js +1 -1
  113. package/dist/components/LpAlert.vue.js +1 -1
  114. package/dist/components/LpAppShell.vue.d.ts +67 -2
  115. package/dist/components/LpAppShell.vue.js +1 -1
  116. package/dist/components/LpAutocomplete.vue.js +1 -1
  117. package/dist/components/LpAvatar.vue.js +1 -1
  118. package/dist/components/LpBadge.vue.js +1 -1
  119. package/dist/components/LpBottomNav.vue.d.ts +28 -0
  120. package/dist/components/LpBottomNav.vue.js +4 -0
  121. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  122. package/dist/components/LpButton.vue.js +1 -1
  123. package/dist/components/LpCalendar.vue.js +1 -1
  124. package/dist/components/LpCard.vue.js +1 -1
  125. package/dist/components/LpChart.vue.js +4 -4
  126. package/dist/components/LpCheckbox.vue.js +1 -1
  127. package/dist/components/LpCodeBlock.vue.js +1 -1
  128. package/dist/components/LpCodeDisplay.vue.js +1 -1
  129. package/dist/components/LpColorPicker.vue.d.ts +15 -2
  130. package/dist/components/LpColorPicker.vue.js +1 -1
  131. package/dist/components/LpCommandPalette.vue.js +4 -4
  132. package/dist/components/LpConfirmDialog.vue.js +1 -1
  133. package/dist/components/LpConfirmHost.vue.js +1 -1
  134. package/dist/components/LpContextMenu.vue.js +1 -1
  135. package/dist/components/LpCopyButton.vue.js +1 -1
  136. package/dist/components/LpCountdown.vue.js +1 -1
  137. package/dist/components/LpDataList.vue.js +1 -1
  138. package/dist/components/LpDatePicker.vue.js +1 -1
  139. package/dist/components/LpDateRangePicker.vue.js +1 -1
  140. package/dist/components/LpDisclosure.vue.js +1 -1
  141. package/dist/components/LpDock.vue.js +1 -1
  142. package/dist/components/LpDrawer.vue.js +1 -1
  143. package/dist/components/LpDropdownMenu.vue.js +1 -1
  144. package/dist/components/LpDropzone.vue.js +2 -2
  145. package/dist/components/LpEditable.vue.js +1 -1
  146. package/dist/components/LpEmptyState.vue.d.ts +2 -0
  147. package/dist/components/LpEmptyState.vue.js +1 -1
  148. package/dist/components/LpFieldNotice.vue.js +1 -1
  149. package/dist/components/LpFileTree.vue.js +1 -1
  150. package/dist/components/LpFileTreeNode.vue.js +1 -1
  151. package/dist/components/LpFormField.vue.js +1 -1
  152. package/dist/components/LpGauge.vue.js +1 -1
  153. package/dist/components/LpHintLayer.vue.js +1 -1
  154. package/dist/components/LpHints.vue.js +1 -1
  155. package/dist/components/LpIcon.vue.js +1 -1
  156. package/dist/components/LpImageEditor.vue.js +3 -3
  157. package/dist/components/LpInfraNode.vue.js +1 -1
  158. package/dist/components/LpInput.vue.js +1 -1
  159. package/dist/components/LpKeys.vue.js +13 -10
  160. package/dist/components/LpLightbox.vue.js +1 -1
  161. package/dist/components/LpLoader.vue.js +1 -1
  162. package/dist/components/LpLogViewer.vue.d.ts +1 -1
  163. package/dist/components/LpLogViewer.vue.js +1 -1
  164. package/dist/components/LpMapPicker.vue.js +1 -1
  165. package/dist/components/LpMediaGallery.vue.js +1 -1
  166. package/dist/components/LpModal.vue.js +1 -1
  167. package/dist/components/LpModalNav.vue.js +1 -1
  168. package/dist/components/LpNotificationBell.vue.js +1 -1
  169. package/dist/components/LpNumberField.vue.js +1 -1
  170. package/dist/components/LpNumberFlow.vue.js +1 -1
  171. package/dist/components/LpPagination.vue.js +1 -1
  172. package/dist/components/LpPaletteFacts.vue.js +2 -2
  173. package/dist/components/LpPaletteHeader.vue.js +2 -2
  174. package/dist/components/LpPaletteStats.vue.js +2 -2
  175. package/dist/components/LpPaletteTheme.vue.js +1 -1
  176. package/dist/components/LpPasswordInput.vue.js +1 -1
  177. package/dist/components/LpPhoneInput.vue.js +1 -1
  178. package/dist/components/LpPie.vue.js +1 -1
  179. package/dist/components/LpPipeline.vue.js +1 -1
  180. package/dist/components/LpProgress.vue.js +1 -1
  181. package/dist/components/LpQuota.vue.js +1 -1
  182. package/dist/components/LpRadioGroup.vue.js +1 -1
  183. package/dist/components/LpRangeCalendar.vue.js +1 -1
  184. package/dist/components/LpRelativeTime.vue.js +1 -1
  185. package/dist/components/LpRepeater.vue.js +1 -1
  186. package/dist/components/LpRollingText.vue.d.ts +2 -2
  187. package/dist/components/LpRollingText.vue.js +1 -1
  188. package/dist/components/LpScramble.vue.js +1 -1
  189. package/dist/components/LpSecretField.vue.js +1 -1
  190. package/dist/components/LpSection.vue.js +1 -1
  191. package/dist/components/LpSegmented.vue.js +1 -1
  192. package/dist/components/LpSelect.vue.js +1 -1
  193. package/dist/components/LpShift.vue.d.ts +20 -0
  194. package/dist/components/LpShift.vue.js +1 -1
  195. package/dist/components/LpShortcutsDialog.vue.js +1 -1
  196. package/dist/components/LpSidebar.vue.d.ts +74 -23
  197. package/dist/components/LpSidebar.vue.js +1 -1
  198. package/dist/components/LpSidebarNav.vue.d.ts +31 -3
  199. package/dist/components/LpSidebarNav.vue.js +1 -1
  200. package/dist/components/LpSidebarRow.vue.d.ts +49 -0
  201. package/dist/components/LpSidebarRow.vue.js +4 -0
  202. package/dist/components/LpStat.vue.d.ts +11 -0
  203. package/dist/components/LpStat.vue.js +1 -1
  204. package/dist/components/LpStatus.vue.js +1 -1
  205. package/dist/components/LpStepMark.vue.js +1 -1
  206. package/dist/components/LpStepper.vue.js +1 -1
  207. package/dist/components/LpSwap.vue.js +1 -1
  208. package/dist/components/LpSwitch.vue.js +1 -1
  209. package/dist/components/LpTabFace.vue.d.ts +14 -0
  210. package/dist/components/LpTabFace.vue.js +4 -0
  211. package/dist/components/LpTable.vue.js +11 -11
  212. package/dist/components/LpTableFilter.vue.js +1 -1
  213. package/dist/components/LpTabs.vue.d.ts +4 -4
  214. package/dist/components/LpTabs.vue.js +18 -72
  215. package/dist/components/LpTagsInput.vue.js +1 -1
  216. package/dist/components/LpTextarea.vue.d.ts +19 -1
  217. package/dist/components/LpTextarea.vue.js +1 -1
  218. package/dist/components/LpThemeProvider.vue.js +1 -1
  219. package/dist/components/LpThemeStudio.vue.d.ts +2 -2
  220. package/dist/components/LpThemeStudio.vue.js +1 -1
  221. package/dist/components/LpThemeStudioSection.vue.d.ts +4 -1
  222. package/dist/components/LpThemeStudioSection.vue.js +1 -1
  223. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  224. package/dist/components/LpTimeField.vue.js +1 -1
  225. package/dist/components/LpToaster.vue.js +1 -1
  226. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  227. package/dist/components/LpTour.vue.js +1 -1
  228. package/dist/components/LpTruncate.vue.js +1 -1
  229. package/dist/components/LpUptimeBar.vue.js +1 -1
  230. package/dist/components/MenuTitle.vue.js +1 -1
  231. package/dist/components/OptionContent.vue.js +1 -1
  232. package/dist/components/PickerField.vue.js +1 -1
  233. package/dist/components/RevealToggle.vue.js +1 -1
  234. package/dist/components/TourCard.vue.js +1 -1
  235. package/dist/components/menuWhen.js +1 -1
  236. package/dist/components/rolling.d.ts +5 -0
  237. package/dist/components/rolling.js +23 -0
  238. package/dist/components/sidebar.d.ts +38 -0
  239. package/dist/components/sidebar.js +6 -1
  240. package/dist/components/tabs.d.ts +3 -0
  241. package/dist/components/tabs.js +6 -0
  242. package/dist/icons-all.js +1 -1
  243. package/dist/index.d.ts +1 -0
  244. package/dist/index.js +154 -153
  245. package/package.json +1 -1
  246. package/src/component-names.ts +1 -0
  247. package/src/components/LpAppShell.vue +75 -7
  248. package/src/components/LpBottomNav.vue +84 -0
  249. package/src/components/LpColorPicker.vue +32 -1
  250. package/src/components/LpEmptyState.vue +4 -1
  251. package/src/components/LpKeys.vue +10 -1
  252. package/src/components/LpNumberFlow.vue +4 -2
  253. package/src/components/LpRollingText.vue +27 -2
  254. package/src/components/LpSegmented.vue +3 -1
  255. package/src/components/LpShift.vue +189 -2
  256. package/src/components/LpSidebar.vue +304 -18
  257. package/src/components/LpSidebarNav.vue +211 -78
  258. package/src/components/LpSidebarRow.vue +242 -0
  259. package/src/components/LpStat.vue +7 -1
  260. package/src/components/LpTabFace.vue +52 -0
  261. package/src/components/LpTabs.vue +6 -41
  262. package/src/components/LpTextarea.vue +34 -4
  263. package/src/components/LpThemeStudio.vue +91 -55
  264. package/src/components/LpThemeStudioSection.vue +15 -7
  265. package/src/components/rolling.ts +28 -0
  266. package/src/components/sidebar.ts +41 -0
  267. package/src/components/tabs.ts +9 -0
  268. package/src/index.ts +1 -0
  269. package/src/kit-icons.ts +1 -1
  270. package/dist/assets/LpTabs-DT0XPTc2.css +0 -18
  271. package/dist/chunks/LpRollingText-DiL717LK.js +0 -51
  272. package/dist/chunks/LpShift-DXNsauQZ.js +0 -40
  273. package/dist/chunks/LpSidebar-Bk7b-K4l.js +0 -256
  274. package/dist/chunks/LpSidebarNav-BR2AW3KT.js +0 -216
  275. package/dist/chunks/LpThemeProvider-DcbfOxsU.js +0 -69
  276. package/dist/chunks/LpThemeStudioSection-BwhqYDLf.js +0 -20
@@ -0,0 +1,367 @@
1
+ import { defineComponent, computed, ref, openBlock, createBlock, mergeProps, unref, withCtx, createElementBlock, createElementVNode, createCommentVNode, Fragment, renderList, toDisplayString, createVNode, normalizeClass, createTextVNode, createSlots, renderSlot } from "vue";
2
+ import { CollapsibleRoot, CollapsibleTrigger, CollapsibleContent } from "reka-ui";
3
+ import { _ as _sfc_main$5 } from "./LpBadge-Huo8EKew.js";
4
+ import "../components/commandSearch.js";
5
+ import "../composables/useHints.js";
6
+ import "../composables/useHintSystem.js";
7
+ import { _ as _sfc_main$4 } from "./LpIcon--5WSb3jJ.js";
8
+ import "../composables/useHotkeys.js";
9
+ import '../assets/MenuShortcut-Cyub0frr.css';import '../assets/LpKeys-C5VMcBOW.css';/* empty css */
10
+ /* empty css */
11
+ import { _ as _sfc_main$2 } from "./LpScrollArea-Hz3-JWUG.js";
12
+ import { _ as _sfc_main$1 } from "./LpSkeleton-BB6XIV-w.js";
13
+ import { _ as _sfc_main$3 } from "./LpSidebarRow-CF9VFZ2w.js";
14
+ import { waiting } from "../components/sidebar.js";
15
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
16
+ const _hoisted_1 = {
17
+ key: 0,
18
+ class: "flex items-center gap-3 px-1"
19
+ };
20
+ const _hoisted_2 = { class: "space-y-1" };
21
+ const _hoisted_3 = {
22
+ key: 0,
23
+ class: "flex flex-col gap-0.5"
24
+ };
25
+ const _hoisted_4 = {
26
+ key: 0,
27
+ class: "px-2 pb-1 pt-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-muted"
28
+ };
29
+ const _hoisted_5 = {
30
+ key: 0,
31
+ class: "flex flex-col gap-0.5"
32
+ };
33
+ const _hoisted_6 = {
34
+ key: 0,
35
+ class: "mx-3 mb-1 border-t border-line"
36
+ };
37
+ const _hoisted_7 = { class: "min-w-0 flex-1 truncate text-left" };
38
+ const _hoisted_8 = {
39
+ key: 2,
40
+ class: "px-2 pb-1 pt-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-muted"
41
+ };
42
+ const __default__ = { inheritAttrs: false };
43
+ const _sfc_main = /* @__PURE__ */ defineComponent({
44
+ ...__default__,
45
+ __name: "LpSidebarNav",
46
+ props: {
47
+ groups: {},
48
+ pillId: {},
49
+ itemActive: {},
50
+ loading: { type: Boolean },
51
+ skeletonRows: { default: 6 },
52
+ skeletonHeader: { type: Boolean, default: true },
53
+ collapsedKeys: { default: () => [] },
54
+ hoverFollow: { type: Boolean, default: false },
55
+ compact: { type: Boolean },
56
+ pinnable: { type: Boolean },
57
+ pinned: { default: () => [] },
58
+ previewDelay: { default: 900 },
59
+ labels: {}
60
+ },
61
+ emits: ["activate", "toggle-section", "toggle-pin"],
62
+ setup(__props, { emit: __emit }) {
63
+ const props = __props;
64
+ const emit = __emit;
65
+ function sectionKey(section) {
66
+ return section.key ?? section.title ?? "";
67
+ }
68
+ const foldedKeys = computed(() => {
69
+ const holdsActive = new Set(
70
+ props.groups.filter((g) => g.items.some((i) => props.itemActive(i) || onPath(i))).map(sectionKey)
71
+ );
72
+ return new Set(
73
+ props.collapsedKeys.filter((k) => k && !holdsActive.has(k))
74
+ );
75
+ });
76
+ function isOpen(section) {
77
+ return props.compact || !foldedKeys.value.has(sectionKey(section));
78
+ }
79
+ const hovered = ref(null);
80
+ function hover(item) {
81
+ if (props.hoverFollow && !item.disabled) hovered.value = item.id;
82
+ }
83
+ function pillUnder(item) {
84
+ return hovered.value ? hovered.value === item.id : props.itemActive(item);
85
+ }
86
+ function onPath(item) {
87
+ return !!item.children?.some((c) => props.itemActive(c));
88
+ }
89
+ const opened = ref(/* @__PURE__ */ new Set());
90
+ function expanded(item) {
91
+ return onPath(item) || opened.value.has(item.id);
92
+ }
93
+ function toggle(item) {
94
+ const next = new Set(opened.value);
95
+ if (next.has(item.id)) next.delete(item.id);
96
+ else next.add(item.id);
97
+ opened.value = next;
98
+ }
99
+ const pinnedIds = computed(() => new Set(props.pinned.map((i) => i.id)));
100
+ function menuOf(item) {
101
+ const own = item.menu ?? [];
102
+ if (!props.pinnable) return own;
103
+ const pinned = pinnedIds.value.has(item.id);
104
+ return [
105
+ ...own,
106
+ {
107
+ label: pinned ? props.labels.unpin : props.labels.pin,
108
+ icon: pinned ? "lucide:pin-off" : "lucide:pin",
109
+ separatorBefore: own.length > 0,
110
+ onSelect: () => emit("toggle-pin", item.id)
111
+ }
112
+ ];
113
+ }
114
+ let typed = "";
115
+ let typedAt = 0;
116
+ function onKey(event) {
117
+ const box = event.currentTarget;
118
+ const list = [...box.querySelectorAll("[data-lp-nav-row]")].filter((r) => r.offsetParent !== null);
119
+ const at = list.indexOf(document.activeElement);
120
+ if (at < 0) return;
121
+ const row = list[at];
122
+ const go = (i) => {
123
+ event.preventDefault();
124
+ list[(i + list.length) % list.length]?.focus();
125
+ };
126
+ switch (event.key) {
127
+ case "ArrowDown":
128
+ return go(at + 1);
129
+ case "ArrowUp":
130
+ return go(at - 1);
131
+ case "Home":
132
+ return go(0);
133
+ case "End":
134
+ return go(list.length - 1);
135
+ case "ArrowRight":
136
+ case "ArrowLeft": {
137
+ const open = event.key === "ArrowRight";
138
+ const toggle2 = row.hasAttribute("aria-expanded") ? row : row.parentElement?.querySelector(":scope > button[aria-expanded]");
139
+ if (toggle2 && toggle2.getAttribute("aria-expanded") === "true" !== open) {
140
+ event.preventDefault();
141
+ toggle2.click();
142
+ return;
143
+ }
144
+ if (!open && row.dataset.lpNavNested !== void 0) {
145
+ for (let i = at - 1; i >= 0; i--) if (list[i].dataset.lpNavNested === void 0) return go(i);
146
+ }
147
+ return;
148
+ }
149
+ }
150
+ if (event.key.length !== 1 || event.ctrlKey || event.metaKey || event.altKey) return;
151
+ const now = Date.now();
152
+ typed = now - typedAt > 700 ? event.key : typed + event.key;
153
+ typedAt = now;
154
+ const needle = typed.toLocaleLowerCase();
155
+ for (let k = 1; k <= list.length; k++) {
156
+ const next = list[(at + k) % list.length];
157
+ if ((next.textContent ?? "").trim().toLocaleLowerCase().startsWith(needle)) return go(at + k);
158
+ }
159
+ }
160
+ const SECTION = "lp-section:";
161
+ function sectionItem(section) {
162
+ const icon = section.icon ?? section.items.find((i) => i.icon)?.icon;
163
+ return {
164
+ id: `${SECTION}${sectionKey(section)}`,
165
+ label: section.title ?? "",
166
+ icon,
167
+ children: section.items
168
+ };
169
+ }
170
+ function activate(item) {
171
+ if (item.id.startsWith(SECTION)) return;
172
+ if (item.children?.length && !item.to && !item.href) toggle(item);
173
+ emit("activate", item);
174
+ }
175
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
176
+ "flex min-h-0 flex-1 flex-col gap-4"
177
+ );
178
+ return (_ctx, _cache) => {
179
+ return __props.loading ? (openBlock(), createBlock(_sfc_main$1, mergeProps({
180
+ key: 0,
181
+ class: unref(rootClass)
182
+ }, unref(rest)), {
183
+ default: withCtx(() => [
184
+ __props.skeletonHeader ? (openBlock(), createElementBlock("div", _hoisted_1, [..._cache[1] || (_cache[1] = [
185
+ createElementVNode("div", { class: "lp-skeleton-item size-10 shrink-0 rounded-pill bg-surface-soft" }, null, -1),
186
+ createElementVNode("div", { class: "flex-1 space-y-2" }, [
187
+ createElementVNode("div", { class: "lp-skeleton-item h-3.5 w-24 rounded-small bg-surface-soft" }),
188
+ createElementVNode("div", { class: "lp-skeleton-item h-3 w-16 rounded-small bg-surface-soft/60" })
189
+ ], -1)
190
+ ])])) : createCommentVNode("", true),
191
+ createElementVNode("div", _hoisted_2, [
192
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.skeletonRows, (n) => {
193
+ return openBlock(), createElementBlock("div", {
194
+ key: n,
195
+ class: "lp-skeleton-item h-9 rounded-control bg-surface-soft"
196
+ });
197
+ }), 128))
198
+ ])
199
+ ]),
200
+ _: 1
201
+ }, 16, ["class"])) : (openBlock(), createBlock(_sfc_main$2, {
202
+ key: 1,
203
+ class: "min-h-0 flex-1",
204
+ "content-class": __props.compact ? "flex min-h-full flex-col gap-1" : "flex min-h-full flex-col gap-4",
205
+ onPointerleave: _cache[0] || (_cache[0] = ($event) => hovered.value = null)
206
+ }, {
207
+ default: withCtx(() => [
208
+ createElementVNode("div", {
209
+ class: "contents",
210
+ onKeydown: onKey
211
+ }, [
212
+ __props.pinned.length ? (openBlock(), createElementBlock("div", _hoisted_3, [
213
+ !__props.compact ? (openBlock(), createElementBlock("p", _hoisted_4, toDisplayString(__props.labels.pinned), 1)) : createCommentVNode("", true),
214
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.pinned, (item) => {
215
+ return openBlock(), createBlock(_sfc_main$3, {
216
+ key: `pinned:${item.id}`,
217
+ item,
218
+ active: __props.itemActive(item),
219
+ pill: false,
220
+ "pill-id": __props.pillId,
221
+ compact: __props.compact,
222
+ menu: menuOf(item),
223
+ "preview-delay": __props.previewDelay,
224
+ "item-active": __props.itemActive,
225
+ onActivate: activate
226
+ }, null, 8, ["item", "active", "pill-id", "compact", "menu", "preview-delay", "item-active"]);
227
+ }), 128))
228
+ ])) : createCommentVNode("", true),
229
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.groups, (section, si) => {
230
+ return openBlock(), createElementBlock(Fragment, { key: si }, [
231
+ __props.compact && section.collapsible && section.title ? (openBlock(), createElementBlock("div", _hoisted_5, [
232
+ createVNode(_sfc_main$3, {
233
+ item: sectionItem(section),
234
+ active: false,
235
+ pill: false,
236
+ "pill-id": __props.pillId,
237
+ compact: "",
238
+ "on-path": section.items.some((i) => __props.itemActive(i) || onPath(i)),
239
+ "preview-delay": __props.previewDelay,
240
+ "item-active": __props.itemActive,
241
+ onActivate: activate
242
+ }, null, 8, ["item", "pill-id", "on-path", "preview-delay", "item-active"])
243
+ ])) : (openBlock(), createBlock(unref(CollapsibleRoot), {
244
+ key: 1,
245
+ as: "div",
246
+ class: "flex flex-col gap-0.5",
247
+ open: isOpen(section),
248
+ disabled: !section.collapsible || !section.title,
249
+ "onUpdate:open": (o) => emit("toggle-section", sectionKey(section), !o)
250
+ }, {
251
+ default: withCtx(() => [
252
+ __props.compact && (si > 0 || __props.pinned.length) ? (openBlock(), createElementBlock("div", _hoisted_6)) : !__props.compact && section.title && section.collapsible ? (openBlock(), createBlock(unref(CollapsibleTrigger), {
253
+ key: 1,
254
+ "data-lp-nav-row": "",
255
+ class: "group/section mt-2 flex cursor-pointer items-center gap-2 rounded-control px-2 py-1 text-[11px] font-semibold uppercase tracking-[0.08em] text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:bg-ink/[0.04] hover:text-ink focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring"
256
+ }, {
257
+ default: withCtx(() => [
258
+ section.icon ? (openBlock(), createBlock(_sfc_main$4, {
259
+ key: 0,
260
+ name: section.icon,
261
+ size: 14,
262
+ class: "shrink-0"
263
+ }, null, 8, ["name"])) : createCommentVNode("", true),
264
+ createElementVNode("span", _hoisted_7, toDisplayString(section.title), 1),
265
+ section.items.some(unref(waiting)) ? (openBlock(), createElementBlock("span", {
266
+ key: 1,
267
+ class: normalizeClass(["size-1.5 shrink-0 rounded-full bg-brand transition-opacity duration-[var(--duration-fast)] motion-reduce:transition-none", isOpen(section) ? "opacity-0" : "opacity-100"])
268
+ }, null, 2)) : createCommentVNode("", true),
269
+ createVNode(_sfc_main$5, {
270
+ tone: "neutral",
271
+ class: normalizeClass(["shrink-0 transition-opacity duration-[var(--duration-fast)] motion-reduce:transition-none", isOpen(section) ? "opacity-0" : "opacity-100"]),
272
+ "aria-hidden": isOpen(section) || void 0
273
+ }, {
274
+ default: withCtx(() => [
275
+ createTextVNode(toDisplayString(section.items.length), 1)
276
+ ]),
277
+ _: 2
278
+ }, 1032, ["class", "aria-hidden"]),
279
+ createVNode(_sfc_main$4, {
280
+ name: "lucide:chevron-down",
281
+ size: 14,
282
+ class: "shrink-0 text-muted transition-transform duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] group-data-[state=closed]/section:-rotate-90 motion-reduce:transition-none"
283
+ })
284
+ ]),
285
+ _: 2
286
+ }, 1024)) : !__props.compact && section.title ? (openBlock(), createElementBlock("p", _hoisted_8, toDisplayString(section.title), 1)) : createCommentVNode("", true),
287
+ createVNode(unref(CollapsibleContent), { class: "flex flex-col gap-0.5 overflow-hidden data-[state=open]:animate-[collapsible-down_260ms_var(--ease-emphasized)] data-[state=closed]:animate-[collapsible-up_200ms_var(--ease-emphasized)] motion-reduce:animate-none" }, {
288
+ default: withCtx(() => [
289
+ (openBlock(true), createElementBlock(Fragment, null, renderList(section.items, (item) => {
290
+ return openBlock(), createElementBlock(Fragment, {
291
+ key: item.id
292
+ }, [
293
+ createVNode(_sfc_main$3, {
294
+ item,
295
+ active: __props.itemActive(item),
296
+ pill: pillUnder(item),
297
+ "pill-id": __props.pillId,
298
+ compact: __props.compact,
299
+ menu: menuOf(item),
300
+ expandable: !__props.compact && !!item.children?.length,
301
+ expanded: expanded(item),
302
+ "on-path": onPath(item),
303
+ "preview-delay": __props.previewDelay,
304
+ hovered: hovered.value === item.id,
305
+ "expand-label": __props.labels.expand,
306
+ "item-active": __props.itemActive,
307
+ onActivate: activate,
308
+ onHover: hover,
309
+ onToggle: ($event) => toggle(item)
310
+ }, createSlots({ _: 2 }, [
311
+ _ctx.$slots.item ? {
312
+ name: "default",
313
+ fn: withCtx((slotProps) => [
314
+ renderSlot(_ctx.$slots, "item", mergeProps({ ref_for: true }, slotProps))
315
+ ]),
316
+ key: "0"
317
+ } : void 0
318
+ ]), 1032, ["item", "active", "pill", "pill-id", "compact", "menu", "expandable", "expanded", "on-path", "preview-delay", "hovered", "expand-label", "item-active", "onToggle"]),
319
+ !__props.compact && item.children?.length ? (openBlock(), createBlock(unref(CollapsibleRoot), {
320
+ key: 0,
321
+ open: expanded(item)
322
+ }, {
323
+ default: withCtx(() => [
324
+ createVNode(unref(CollapsibleContent), { class: "flex flex-col gap-0.5 overflow-hidden data-[state=open]:animate-[collapsible-down_220ms_var(--ease-emphasized)] data-[state=closed]:animate-[collapsible-up_180ms_var(--ease-emphasized)] motion-reduce:animate-none" }, {
325
+ default: withCtx(() => [
326
+ (openBlock(true), createElementBlock(Fragment, null, renderList(item.children, (child) => {
327
+ return openBlock(), createBlock(_sfc_main$3, {
328
+ key: child.id,
329
+ nested: "",
330
+ item: child,
331
+ active: __props.itemActive(child),
332
+ pill: pillUnder(child),
333
+ "pill-id": __props.pillId,
334
+ menu: menuOf(child),
335
+ "preview-delay": __props.previewDelay,
336
+ hovered: hovered.value === child.id,
337
+ "item-active": __props.itemActive,
338
+ onActivate: activate,
339
+ onHover: hover
340
+ }, null, 8, ["item", "active", "pill", "pill-id", "menu", "preview-delay", "hovered", "item-active"]);
341
+ }), 128))
342
+ ]),
343
+ _: 2
344
+ }, 1024)
345
+ ]),
346
+ _: 2
347
+ }, 1032, ["open"])) : createCommentVNode("", true)
348
+ ], 64);
349
+ }), 128))
350
+ ]),
351
+ _: 2
352
+ }, 1024)
353
+ ]),
354
+ _: 2
355
+ }, 1032, ["open", "disabled", "onUpdate:open"]))
356
+ ], 64);
357
+ }), 128))
358
+ ], 32)
359
+ ]),
360
+ _: 3
361
+ }, 8, ["content-class"]));
362
+ };
363
+ }
364
+ });
365
+ export {
366
+ _sfc_main as _
367
+ };
@@ -0,0 +1,304 @@
1
+ import { defineComponent, ref, watch, onBeforeUnmount, computed, openBlock, createBlock, withCtx, createElementBlock, createElementVNode, toDisplayString, createCommentVNode, resolveDynamicComponent, createTextVNode, unref, Fragment, renderList, mergeProps, createVNode, normalizeClass, normalizeStyle, renderSlot } from "vue";
2
+ import { Motion } from "motion-v";
3
+ import { useLocale } from "../composables/useLocale.js";
4
+ import { usePillTransition } from "../composables/usePillTransition.js";
5
+ import { useLinkComponent } from "../composables/useLpConfig.js";
6
+ import { _ as _sfc_main$2 } from "./LpBadge-Huo8EKew.js";
7
+ import { _ as _sfc_main$4 } from "./LpContextMenu-rx2tCjwk.js";
8
+ import { _ as _sfc_main$1 } from "./LpHoverCard-spGxyw7T.js";
9
+ import { _ as _sfc_main$3 } from "./LpIcon--5WSb3jJ.js";
10
+ import LpKeys from "../components/LpKeys.vue.js";
11
+ import { _ as _sfc_main$5 } from "./LpNumberFlow-CcxEGUy0.js";
12
+ import { waiting } from "../components/sidebar.js";
13
+ import { resolveLink } from "../components/link.js";
14
+ const _hoisted_1 = { class: "relative flex flex-col" };
15
+ const _hoisted_2 = {
16
+ key: 1,
17
+ class: "lp-sweep absolute inset-y-0 left-0 w-2/5 rounded-pill bg-brand"
18
+ };
19
+ const _hoisted_3 = {
20
+ key: 0,
21
+ class: "relative z-10 shrink-0"
22
+ };
23
+ const _hoisted_4 = {
24
+ key: 1,
25
+ class: "relative z-10 text-xs font-semibold uppercase"
26
+ };
27
+ const _hoisted_5 = {
28
+ key: 2,
29
+ class: "relative z-10 size-1 shrink-0 rounded-full bg-current opacity-50"
30
+ };
31
+ const _hoisted_6 = { class: "relative z-10 min-w-0 flex-1 truncate text-left" };
32
+ const _hoisted_7 = {
33
+ key: 1,
34
+ class: "relative z-10 size-2 shrink-0 rounded-full bg-brand"
35
+ };
36
+ const _hoisted_8 = {
37
+ key: 0,
38
+ class: "absolute inset-0 animate-ping rounded-pill bg-brand/30"
39
+ };
40
+ const _hoisted_9 = {
41
+ key: 3,
42
+ class: "w-5 shrink-0",
43
+ "aria-hidden": "true"
44
+ };
45
+ const _hoisted_10 = ["aria-label", "aria-expanded"];
46
+ const _hoisted_11 = {
47
+ key: 0,
48
+ class: "flex flex-col"
49
+ };
50
+ const _hoisted_12 = {
51
+ key: 0,
52
+ class: "flex items-center gap-2 border-b border-line px-3 py-2 text-sm font-medium text-ink"
53
+ };
54
+ const _hoisted_13 = { class: "min-w-0 flex-1 truncate" };
55
+ const _hoisted_14 = {
56
+ key: 1,
57
+ class: "flex flex-col gap-0.5"
58
+ };
59
+ const _hoisted_15 = { class: "flex items-center gap-2 px-2 py-1 text-sm font-medium text-ink" };
60
+ const _hoisted_16 = { class: "min-w-0 flex-1 truncate" };
61
+ const _hoisted_17 = {
62
+ key: 0,
63
+ class: "flex max-h-[min(70vh,30rem)] flex-col gap-0.5 overflow-y-auto"
64
+ };
65
+ const _hoisted_18 = { class: "min-w-0 flex-1 truncate" };
66
+ const _sfc_main = /* @__PURE__ */ defineComponent({
67
+ __name: "LpSidebarRow",
68
+ props: {
69
+ item: {},
70
+ active: { type: Boolean },
71
+ pill: { type: Boolean },
72
+ pillId: {},
73
+ compact: { type: Boolean },
74
+ nested: { type: Boolean },
75
+ menu: { default: () => [] },
76
+ expandable: { type: Boolean },
77
+ expanded: { type: Boolean },
78
+ onPath: { type: Boolean },
79
+ previewDelay: { default: 900 },
80
+ hovered: { type: Boolean },
81
+ expandLabel: {},
82
+ itemActive: {}
83
+ },
84
+ emits: ["activate", "hover", "toggle"],
85
+ setup(__props, { emit: __emit }) {
86
+ const props = __props;
87
+ const emit = __emit;
88
+ const locale = useLocale();
89
+ const pillTransition = usePillTransition();
90
+ const linkComponent = useLinkComponent();
91
+ function rowOf(item) {
92
+ const link = item.disabled ? null : resolveLink(linkComponent.value, { to: item.to, href: item.href });
93
+ if (link) return link;
94
+ return { is: "button", props: { type: "button", disabled: item.disabled || void 0 } };
95
+ }
96
+ const bumped = ref(false);
97
+ let bumpTimer;
98
+ watch(
99
+ () => props.item.badge,
100
+ (now, was) => {
101
+ if (typeof now !== "number" || typeof was !== "number" || now <= was) return;
102
+ bumped.value = true;
103
+ clearTimeout(bumpTimer);
104
+ bumpTimer = setTimeout(() => bumped.value = false, 1200);
105
+ }
106
+ );
107
+ onBeforeUnmount(() => clearTimeout(bumpTimer));
108
+ const initials = computed(
109
+ () => props.item.label.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => [...w][0]).join("")
110
+ );
111
+ const hidden = computed(() => (props.compact || !props.expanded) && !!props.item.children?.some(waiting));
112
+ const hasBadge = computed(() => props.item.badge != null || !!props.item.dot || hidden.value);
113
+ const card = computed(() => !props.item.disabled && (props.compact || !!props.item.preview));
114
+ const delay = computed(() => props.compact && !props.item.preview ? 250 : props.previewDelay);
115
+ return (_ctx, _cache) => {
116
+ return openBlock(), createBlock(_sfc_main$1, {
117
+ disabled: !card.value,
118
+ side: "right",
119
+ align: "start",
120
+ "side-offset": __props.compact ? 12 : 16,
121
+ "open-delay": delay.value,
122
+ "close-delay": 120,
123
+ touch: "none",
124
+ "panel-class": __props.item.preview ? "w-80 p-0 overflow-hidden" : "w-56 p-2"
125
+ }, {
126
+ trigger: withCtx(() => [
127
+ createElementVNode("div", _hoisted_1, [
128
+ createVNode(_sfc_main$4, {
129
+ items: __props.menu,
130
+ title: (__props.item.menuTitle ?? __props.item.label) || void 0,
131
+ "title-icon": __props.item.icon
132
+ }, {
133
+ default: withCtx(() => [
134
+ (openBlock(), createBlock(resolveDynamicComponent(rowOf(__props.item).is), mergeProps(rowOf(__props.item).props, {
135
+ "aria-current": __props.active ? "page" : void 0,
136
+ "aria-disabled": __props.item.disabled || void 0,
137
+ "aria-label": __props.compact ? __props.item.label : void 0,
138
+ "data-lp-nav-row": "",
139
+ "aria-keyshortcuts": __props.item.hotkey,
140
+ "aria-busy": __props.item.busy ? true : void 0,
141
+ "data-lp-nav-nested": __props.nested || void 0,
142
+ class: ["group/item relative flex items-center rounded-control font-medium outline-none transition-colors duration-[var(--duration-fast)] focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring", [
143
+ __props.compact ? ["ml-1 size-10 justify-center", __props.onPath && !__props.active ? "bg-ink/[0.06]" : ""] : __props.nested ? "gap-2.5 py-1.5 pl-9 pr-3 text-[13px]" : "gap-3 px-3 py-2 text-sm",
144
+ __props.item.disabled ? "cursor-not-allowed text-muted/50" : __props.active || __props.hovered || __props.onPath ? "text-ink" : "text-muted hover:text-ink"
145
+ ]],
146
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("activate", __props.item)),
147
+ onPointerenter: _cache[1] || (_cache[1] = ($event) => emit("hover", __props.item))
148
+ }), {
149
+ default: withCtx(() => [
150
+ __props.item.busy !== void 0 && __props.item.busy !== false ? (openBlock(), createElementBlock("span", {
151
+ key: 0,
152
+ class: normalizeClass(["pointer-events-none absolute bottom-0.5 z-10 h-0.5 overflow-hidden rounded-pill bg-brand/15", __props.compact ? "inset-x-2" : "inset-x-3"])
153
+ }, [
154
+ typeof __props.item.busy === "number" ? (openBlock(), createElementBlock("span", {
155
+ key: 0,
156
+ class: "block h-full rounded-pill bg-brand transition-[width] duration-(--duration-medium) ease-[var(--ease-emphasized)]",
157
+ style: normalizeStyle({ width: `${Math.round(Math.min(1, Math.max(0, __props.item.busy)) * 100)}%` })
158
+ }, null, 4)) : (openBlock(), createElementBlock("span", _hoisted_2))
159
+ ], 2)) : createCommentVNode("", true),
160
+ __props.pill ? (openBlock(), createBlock(unref(Motion), {
161
+ key: 1,
162
+ "layout-id": __props.pillId,
163
+ transition: unref(pillTransition),
164
+ class: "absolute inset-0 z-0 rounded-control bg-brand-soft"
165
+ }, null, 8, ["layout-id", "transition"])) : createCommentVNode("", true),
166
+ renderSlot(_ctx.$slots, "default", {
167
+ item: __props.item,
168
+ active: __props.active
169
+ }, () => [
170
+ __props.item.icon ? (openBlock(), createElementBlock("span", _hoisted_3, [
171
+ createVNode(_sfc_main$3, {
172
+ name: __props.item.icon,
173
+ size: __props.nested ? 15 : 17,
174
+ class: normalizeClass(["transition-colors", __props.active ? "text-brand" : ""])
175
+ }, null, 8, ["name", "size", "class"]),
176
+ __props.compact && hasBadge.value ? (openBlock(), createElementBlock("span", {
177
+ key: 0,
178
+ class: normalizeClass(["absolute -right-1 -top-1 size-2 rounded-full bg-brand ring-2 ring-surface-raised", bumped.value ? "animate-pulse" : ""])
179
+ }, null, 2)) : createCommentVNode("", true)
180
+ ])) : __props.compact ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(initials.value), 1)) : __props.nested ? (openBlock(), createElementBlock("span", _hoisted_5)) : createCommentVNode("", true),
181
+ !__props.compact ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [
182
+ createElementVNode("span", _hoisted_6, toDisplayString(__props.item.label), 1),
183
+ __props.item.hotkey && !hasBadge.value && !__props.expandable ? (openBlock(), createBlock(LpKeys, {
184
+ key: 0,
185
+ combo: __props.item.hotkey,
186
+ size: "sm",
187
+ "aria-hidden": "true",
188
+ class: "pointer-events-none absolute right-2 z-10 rounded-small bg-surface-raised/90 opacity-0 transition-opacity duration-(--duration-fast) group-hover/item:opacity-100 group-focus-visible/item:opacity-100"
189
+ }, null, 8, ["combo"])) : createCommentVNode("", true),
190
+ hasBadge.value && __props.item.badge == null ? (openBlock(), createElementBlock("span", _hoisted_7)) : createCommentVNode("", true),
191
+ __props.item.badge != null ? (openBlock(), createBlock(_sfc_main$2, {
192
+ key: 2,
193
+ tone: __props.active ? "brand" : "neutral",
194
+ class: "relative z-10 shrink-0"
195
+ }, {
196
+ default: withCtx(() => [
197
+ bumped.value ? (openBlock(), createElementBlock("span", _hoisted_8)) : createCommentVNode("", true),
198
+ typeof __props.item.badge === "number" ? (openBlock(), createBlock(_sfc_main$5, {
199
+ key: 1,
200
+ value: __props.item.badge,
201
+ grouped: "",
202
+ locale: unref(locale),
203
+ "animate-on-mount": false
204
+ }, null, 8, ["value", "locale"])) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
205
+ createTextVNode(toDisplayString(__props.item.badge), 1)
206
+ ], 64))
207
+ ]),
208
+ _: 1
209
+ }, 8, ["tone"])) : createCommentVNode("", true),
210
+ __props.expandable ? (openBlock(), createElementBlock("span", _hoisted_9)) : createCommentVNode("", true)
211
+ ], 64)) : createCommentVNode("", true)
212
+ ])
213
+ ]),
214
+ _: 3
215
+ }, 16, ["aria-current", "aria-disabled", "aria-label", "aria-keyshortcuts", "aria-busy", "data-lp-nav-nested", "class"]))
216
+ ]),
217
+ _: 3
218
+ }, 8, ["items", "title", "title-icon"]),
219
+ __props.expandable && !__props.compact ? (openBlock(), createElementBlock("button", {
220
+ key: 0,
221
+ type: "button",
222
+ class: "absolute right-2 top-1/2 z-20 grid size-6 -translate-y-1/2 place-items-center rounded-small text-muted outline-none transition-colors hover:bg-ink/[0.06] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
223
+ "aria-label": __props.expandLabel,
224
+ "aria-expanded": __props.expanded,
225
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("toggle"))
226
+ }, [
227
+ createVNode(_sfc_main$3, {
228
+ name: "lucide:chevron-right",
229
+ size: 14,
230
+ class: normalizeClass(["transition-transform duration-(--duration-fast) ease-[var(--ease-emphasized)] motion-reduce:transition-none", __props.expanded ? "rotate-90" : ""])
231
+ }, null, 8, ["class"])
232
+ ], 8, _hoisted_10)) : createCommentVNode("", true)
233
+ ])
234
+ ]),
235
+ default: withCtx(() => [
236
+ __props.item.preview ? (openBlock(), createElementBlock("div", _hoisted_11, [
237
+ __props.compact ? (openBlock(), createElementBlock("div", _hoisted_12, [
238
+ createElementVNode("span", _hoisted_13, toDisplayString(__props.item.label), 1),
239
+ __props.item.hotkey ? (openBlock(), createBlock(LpKeys, {
240
+ key: 0,
241
+ combo: __props.item.hotkey,
242
+ size: "sm"
243
+ }, null, 8, ["combo"])) : createCommentVNode("", true)
244
+ ])) : createCommentVNode("", true),
245
+ (openBlock(), createBlock(resolveDynamicComponent(__props.item.preview)))
246
+ ])) : (openBlock(), createElementBlock("div", _hoisted_14, [
247
+ createElementVNode("div", _hoisted_15, [
248
+ createElementVNode("span", _hoisted_16, toDisplayString(__props.item.label), 1),
249
+ __props.item.badge != null ? (openBlock(), createBlock(_sfc_main$2, {
250
+ key: 0,
251
+ tone: "neutral"
252
+ }, {
253
+ default: withCtx(() => [
254
+ createTextVNode(toDisplayString(typeof __props.item.badge === "number" ? __props.item.badge.toLocaleString(unref(locale)) : __props.item.badge), 1)
255
+ ]),
256
+ _: 1
257
+ })) : createCommentVNode("", true),
258
+ __props.item.hotkey ? (openBlock(), createBlock(LpKeys, {
259
+ key: 1,
260
+ combo: __props.item.hotkey,
261
+ size: "sm"
262
+ }, null, 8, ["combo"])) : createCommentVNode("", true)
263
+ ]),
264
+ __props.item.children?.length ? (openBlock(), createElementBlock("div", _hoisted_17, [
265
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.item.children, (child) => {
266
+ return openBlock(), createBlock(resolveDynamicComponent(rowOf(child).is), mergeProps({
267
+ key: child.id
268
+ }, { ref_for: true }, rowOf(child).props, {
269
+ "aria-current": __props.itemActive?.(child) ? "page" : void 0,
270
+ class: ["flex shrink-0 items-center gap-2 rounded-control px-2 py-1.5 text-left text-[13px] outline-none transition-colors hover:bg-ink/[0.05] focus-visible:ring-2 focus-visible:ring-ring", child.disabled ? "opacity-50" : __props.itemActive?.(child) ? "text-brand" : "text-muted hover:text-ink"],
271
+ onClick: ($event) => emit("activate", child)
272
+ }), {
273
+ default: withCtx(() => [
274
+ child.icon ? (openBlock(), createBlock(_sfc_main$3, {
275
+ key: 0,
276
+ name: child.icon,
277
+ size: 15,
278
+ class: "shrink-0"
279
+ }, null, 8, ["name"])) : createCommentVNode("", true),
280
+ createElementVNode("span", _hoisted_18, toDisplayString(child.label), 1),
281
+ child.badge != null ? (openBlock(), createBlock(_sfc_main$2, {
282
+ key: 1,
283
+ tone: "neutral"
284
+ }, {
285
+ default: withCtx(() => [
286
+ createTextVNode(toDisplayString(child.badge), 1)
287
+ ]),
288
+ _: 2
289
+ }, 1024)) : createCommentVNode("", true)
290
+ ]),
291
+ _: 2
292
+ }, 1040, ["aria-current", "class", "onClick"]);
293
+ }), 128))
294
+ ])) : createCommentVNode("", true)
295
+ ]))
296
+ ]),
297
+ _: 3
298
+ }, 8, ["disabled", "side-offset", "open-delay", "panel-class"]);
299
+ };
300
+ }
301
+ });
302
+ export {
303
+ _sfc_main as _
304
+ };