@leavepulse/ui 0.71.1 → 0.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/dist/assets/{LpCommandPalette-DgPZX0us.css → LpCommandPalette-Rtbg669l.css} +19 -19
  2. package/dist/assets/{LpNumberFlow-rZkwQwlU.css → LpNumberFlow-Chp9pEDe.css} +8 -0
  3. package/dist/assets/LpTabs-CDchzoRL.css +18 -0
  4. package/dist/chunks/{ContextMenuItems-eS7qx9gD.js → ContextMenuItems-BXumicbh.js} +1 -1
  5. package/dist/chunks/{DropzoneLinkField-DkFhdfEJ.js → DropzoneLinkField-D2Rnkcys.js} +2 -2
  6. package/dist/chunks/{FieldWrapper-YzbvvC3M.js → FieldWrapper-DnA1rxZ8.js} +1 -1
  7. package/dist/chunks/{LayoutCanvas-Ba4A9QC5.js → LayoutCanvas-CNOAUk7D.js} +1 -1
  8. package/dist/chunks/{LayoutNode-CTTTLMDM.js → LayoutNode-DF5BMN0J.js} +1 -1
  9. package/dist/chunks/{LpActionBar-B7anGlkI.js → LpActionBar-DfiBL1dE.js} +3 -3
  10. package/dist/chunks/{LpAddressInput-CD0bzrt-.js → LpAddressInput-B1bB3F6M.js} +7 -7
  11. package/dist/chunks/{LpAlert-BHi7ARqu.js → LpAlert-CpRF9eYr.js} +3 -3
  12. package/dist/chunks/{LpAppShell-1RmBp6xQ.js → LpAppShell-D8Q0Jv9d.js} +68 -18
  13. package/dist/chunks/{LpAutocomplete-DDqe2M5g.js → LpAutocomplete-DOu7FN5P.js} +2 -2
  14. package/dist/chunks/{LpAvatar-DqfKCIdr.js → LpAvatar-Cg6Az3wz.js} +1 -1
  15. package/dist/chunks/{LpBadge-C8fKEmTF.js → LpBadge-vtCpsDmv.js} +3 -3
  16. package/dist/chunks/LpBottomNav-VXJf0cKc.js +89 -0
  17. package/dist/chunks/{LpBreadcrumbs-DhcoStFa.js → LpBreadcrumbs-BdzjQcql.js} +3 -3
  18. package/dist/chunks/{LpButton-BQDAFXBd.js → LpButton-Dk7eT4ro.js} +1 -1
  19. package/dist/chunks/{LpCalendar-NmrA47J9.js → LpCalendar-CuoWks-0.js} +1 -1
  20. package/dist/chunks/{LpCard-CqKLnEhl.js → LpCard-Ce3rw8zm.js} +1 -1
  21. package/dist/chunks/{LpCheckbox-BoOuLnGB.js → LpCheckbox-DLX4amba.js} +2 -2
  22. package/dist/chunks/{LpCodeBlock-Czu-fq1M.js → LpCodeBlock-j0W5bpmF.js} +2 -2
  23. package/dist/chunks/{LpCodeDisplay-BK2FHbtM.js → LpCodeDisplay-COdiv4xu.js} +6 -6
  24. package/dist/chunks/{LpColorPicker-Ee1DZiRd.js → LpColorPicker-1y1QJHZR.js} +56 -28
  25. package/dist/chunks/{LpCommandScope-ubtWDMa0.js → LpCommandScope-BlKcgBnK.js} +1 -1
  26. package/dist/chunks/{LpConfirmDialog-i15pulMT.js → LpConfirmDialog-w1ni5nxh.js} +3 -3
  27. package/dist/chunks/{LpConfirmHost-D0oGavtd.js → LpConfirmHost-Br_-Gn-6.js} +1 -1
  28. package/dist/chunks/{LpContextMenu-DXpFJjlO.js → LpContextMenu-rx2tCjwk.js} +2 -2
  29. package/dist/chunks/{LpCopyButton-Dmq7DmFw.js → LpCopyButton-DaD1KCn6.js} +2 -2
  30. package/dist/chunks/{LpCountdown-DTdMF8DL.js → LpCountdown-Cgy0mVEq.js} +3 -3
  31. package/dist/chunks/{LpDataList-CFPtSsBB.js → LpDataList-CkcGFJgv.js} +3 -3
  32. package/dist/chunks/{LpDatePicker-cC9K-Pk8.js → LpDatePicker-CA0QTfBC.js} +4 -4
  33. package/dist/chunks/{LpDateRangePicker-BVQKPbvo.js → LpDateRangePicker-u3J51xXk.js} +2 -2
  34. package/dist/chunks/{LpDisclosure-hRnX3FWL.js → LpDisclosure-Cpa7Hc5T.js} +1 -1
  35. package/dist/chunks/{LpDrawer-u4rxnuR-.js → LpDrawer-RRamxbLV.js} +1 -1
  36. package/dist/chunks/{LpDropdownMenu-BgZ0Z_Im.js → LpDropdownMenu-Dl7Z4ZhS.js} +2 -2
  37. package/dist/chunks/{LpEditable-CjxuOVh_.js → LpEditable-D3PvD6Zm.js} +5 -5
  38. package/dist/chunks/{LpEmptyState-CKFTtQgJ.js → LpEmptyState-EQHiRYhG.js} +7 -3
  39. package/dist/chunks/{LpFieldNotice-CPI8EwtU.js → LpFieldNotice-CzQ2_5rQ.js} +1 -1
  40. package/dist/chunks/{LpFileTree-BH0gNlSJ.js → LpFileTree-D7KTaJiM.js} +2 -2
  41. package/dist/chunks/{LpFileTreeNode-gPVB1oXM.js → LpFileTreeNode-14GVqQTd.js} +5 -5
  42. package/dist/chunks/{LpFormField-gRASfyj2.js → LpFormField-MSQhRCTz.js} +2 -2
  43. package/dist/chunks/{LpGauge-BdjPGnqw.js → LpGauge-BO1PYYqD.js} +2 -2
  44. package/dist/chunks/{LpHintLayer-C2asBIfs.js → LpHintLayer-CmYm37z7.js} +2 -2
  45. package/dist/chunks/{LpHints-CNZQ76JV.js → LpHints-iLIRUkCj.js} +3 -3
  46. package/dist/chunks/{LpIcon-DkP-9mzK.js → LpIcon--5WSb3jJ.js} +1 -1
  47. package/dist/chunks/{LpInfraNode-yTh4-5qa.js → LpInfraNode-BT0VQrOa.js} +2 -2
  48. package/dist/chunks/{LpInput-2H-5ILOB.js → LpInput-1eNvtzXs.js} +2 -2
  49. package/dist/chunks/{LpLightbox-lAt5uIfx.js → LpLightbox-DWw6OSA4.js} +3 -3
  50. package/dist/chunks/{LpLoader-DjJEX8hL.js → LpLoader-B82_CcV0.js} +1 -1
  51. package/dist/chunks/{LpLogViewer-x78YfhJf.js → LpLogViewer-pzanZASC.js} +6 -6
  52. package/dist/chunks/{LpMapPicker-Dp5RSCi9.js → LpMapPicker-DNIUvF6V.js} +2 -2
  53. package/dist/chunks/{LpMediaGallery-D92oJfY_.js → LpMediaGallery-Dx8xzg5N.js} +3 -3
  54. package/dist/chunks/{LpModal-CpH0bNo7.js → LpModal-BnjZ2iem.js} +1 -1
  55. package/dist/chunks/{LpModalNav-BH4ANQGJ.js → LpModalNav-Cu04W1pV.js} +4 -4
  56. package/dist/chunks/{LpNotificationBell-BdUQqZhs.js → LpNotificationBell-PSQqFqEv.js} +8 -8
  57. package/dist/chunks/{LpNumberField-DZY3Z670.js → LpNumberField-e0IBkWU1.js} +1 -1
  58. package/dist/chunks/{LpNumberFlow-5khYxsfX.js → LpNumberFlow-CcxEGUy0.js} +10 -7
  59. package/dist/chunks/{LpPagination-DbeACavM.js → LpPagination-BIIiYHXR.js} +1 -1
  60. package/dist/chunks/{LpPaletteTheme-CqWNRwHE.js → LpPaletteTheme-D05ywM1W.js} +8 -6
  61. package/dist/chunks/{LpPasswordInput-BzAZsf5V.js → LpPasswordInput-vdcw-koG.js} +2 -2
  62. package/dist/chunks/{LpPhoneInput-BMpd-0QR.js → LpPhoneInput-CETEp5W7.js} +2 -2
  63. package/dist/chunks/{LpPie-DdFSTbGE.js → LpPie-BlWDxCtG.js} +6 -6
  64. package/dist/chunks/{LpPipeline-zjEM1Lwc.js → LpPipeline-BXjoxkq_.js} +4 -4
  65. package/dist/chunks/{LpProgress-BX33EKkN.js → LpProgress-rOlyafqp.js} +1 -1
  66. package/dist/chunks/{LpQuota-DqNv1yjs.js → LpQuota-B12yijdB.js} +3 -3
  67. package/dist/chunks/{LpRadioGroup-CsXeV9Ct.js → LpRadioGroup-ggaPL92T.js} +1 -1
  68. package/dist/chunks/{LpRangeCalendar-l-0nSFmY.js → LpRangeCalendar-CYYUYqJ7.js} +1 -1
  69. package/dist/chunks/{LpRelativeTime-UM8EkfrN.js → LpRelativeTime-DwgCb5-8.js} +1 -1
  70. package/dist/chunks/{LpRepeater-OvzByE5L.js → LpRepeater-fliVBcN7.js} +3 -3
  71. package/dist/chunks/LpRollingText-B54Pje7P.js +86 -0
  72. package/dist/chunks/{LpScramble-TDO5Kdou.js → LpScramble-Cw-af0Yh.js} +1 -1
  73. package/dist/chunks/{LpSecretField-DwQiPOko.js → LpSecretField-D_IMxEGW.js} +7 -7
  74. package/dist/chunks/{LpSection-DcQsieHG.js → LpSection-DFK_uoJE.js} +1 -1
  75. package/dist/chunks/{LpSegmented-D2VST0o3.js → LpSegmented-CeACsMMA.js} +4 -2
  76. package/dist/chunks/{LpSelect-DYX2-u5A.js → LpSelect-Cxq4yBGd.js} +7 -7
  77. package/dist/chunks/LpShift-BAp8lGoa.js +160 -0
  78. package/dist/chunks/LpSidebar-BftYsk5d.js +494 -0
  79. package/dist/chunks/LpSidebarNav-BzNWMZfc.js +357 -0
  80. package/dist/chunks/LpSidebarRow-BIReMT1f.js +302 -0
  81. package/dist/chunks/{LpStat-DIsQfbeD.js → LpStat-BFCM6fUn.js} +9 -7
  82. package/dist/chunks/{LpStatus-BQU1TUsv.js → LpStatus-BWTLVPVh.js} +3 -3
  83. package/dist/chunks/{LpStepMark-CXa7DJy_.js → LpStepMark-DkdkebLC.js} +3 -3
  84. package/dist/chunks/{LpStepper-C9RM_yTG.js → LpStepper-BgqjKrqg.js} +1 -1
  85. package/dist/chunks/{LpSwap-DzE6M3Mg.js → LpSwap-B5YOXgtx.js} +1 -1
  86. package/dist/chunks/{LpSwitch-bGZxUDSx.js → LpSwitch-DyrRes7s.js} +1 -1
  87. package/dist/chunks/LpTabFace-D6BMCbAP.js +77 -0
  88. package/dist/chunks/{LpTableFilter-CTZMqFDU.js → LpTableFilter-Dkzamzkl.js} +3 -3
  89. package/dist/chunks/{LpTagsInput-DrjmrOge.js → LpTagsInput-DAZNNehI.js} +5 -5
  90. package/dist/chunks/{LpTextarea-BbYqmG1S.js → LpTextarea-DbmVPj2X.js} +32 -7
  91. package/dist/chunks/{useTheme-BOV_-AiY.js → LpThemeProvider-8MG6yqU9.js} +66 -1
  92. package/dist/chunks/{LpThemeStudio-B2nPaG-h.js → LpThemeStudio-DWtG6OZZ.js} +140 -106
  93. package/dist/chunks/LpThemeStudioSection-B7bt8Iyg.js +32 -0
  94. package/dist/chunks/{LpThemeSwitcher-C0A5sg_E.js → LpThemeSwitcher-Dcx-VkSk.js} +9 -8
  95. package/dist/chunks/{LpTimeField-DQ8WvPr2.js → LpTimeField-BawSVsmt.js} +1 -1
  96. package/dist/chunks/{LpToaster-BTTl_wuy.js → LpToaster-50hp_B5O.js} +2 -2
  97. package/dist/chunks/{LpTopologyCanvas-B0wEvAoq.js → LpTopologyCanvas-CnUh8uzS.js} +43 -13
  98. package/dist/chunks/{LpTour-BgCfNlaW.js → LpTour-DC3LTlxg.js} +1 -1
  99. package/dist/chunks/{LpTruncate-TcqfkyJM.js → LpTruncate-Ced4gquB.js} +1 -1
  100. package/dist/chunks/{LpUptimeBar-DRadGq4Y.js → LpUptimeBar-CuB0LX8K.js} +4 -4
  101. package/dist/chunks/{MenuTitle-Dab3EGOp.js → MenuTitle-BmCNNTKH.js} +1 -1
  102. package/dist/chunks/{OptionContent-DPzNsybd.js → OptionContent-22UT8zLn.js} +1 -1
  103. package/dist/chunks/{PickerField-DwLw7j0L.js → PickerField-Bfh8id3d.js} +2 -2
  104. package/dist/chunks/{RevealToggle-BVFM_FAU.js → RevealToggle-B0ITuIX-.js} +2 -2
  105. package/dist/chunks/{TourCard--2IfgnUU.js → TourCard-CBkj1GYi.js} +5 -5
  106. package/dist/chunks/{icons-CLu1iR1j.js → icons-DMITlfw5.js} +1 -1
  107. package/dist/chunks/{palette-BiY7yQZL.js → palette-Cvxl_1tM.js} +1 -1
  108. package/dist/component-names.d.ts +1 -1
  109. package/dist/components/ContextMenuItems.vue.js +1 -1
  110. package/dist/components/DropzoneLinkField.vue.js +1 -1
  111. package/dist/components/FieldWrapper.vue.js +1 -1
  112. package/dist/components/LayoutCanvas.vue.js +1 -1
  113. package/dist/components/LayoutNode.vue.js +1 -1
  114. package/dist/components/LpActionBar.vue.js +1 -1
  115. package/dist/components/LpAddressInput.vue.js +1 -1
  116. package/dist/components/LpAlert.vue.js +1 -1
  117. package/dist/components/LpAppShell.vue.d.ts +67 -2
  118. package/dist/components/LpAppShell.vue.js +1 -1
  119. package/dist/components/LpAutocomplete.vue.js +1 -1
  120. package/dist/components/LpAvatar.vue.js +1 -1
  121. package/dist/components/LpBadge.vue.js +1 -1
  122. package/dist/components/LpBottomNav.vue.d.ts +28 -0
  123. package/dist/components/LpBottomNav.vue.js +4 -0
  124. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  125. package/dist/components/LpButton.vue.js +1 -1
  126. package/dist/components/LpCalendar.vue.js +1 -1
  127. package/dist/components/LpCard.vue.js +1 -1
  128. package/dist/components/LpChart.vue.js +26 -8
  129. package/dist/components/LpCheckbox.vue.js +1 -1
  130. package/dist/components/LpCodeBlock.vue.js +1 -1
  131. package/dist/components/LpCodeDisplay.vue.js +1 -1
  132. package/dist/components/LpColorPicker.vue.d.ts +15 -2
  133. package/dist/components/LpColorPicker.vue.js +1 -1
  134. package/dist/components/LpCommandPalette.vue.js +47 -26
  135. package/dist/components/LpCommandScope.vue.js +1 -1
  136. package/dist/components/LpConfirmDialog.vue.js +1 -1
  137. package/dist/components/LpConfirmHost.vue.js +1 -1
  138. package/dist/components/LpContextMenu.vue.js +1 -1
  139. package/dist/components/LpCopyButton.vue.js +1 -1
  140. package/dist/components/LpCountdown.vue.js +1 -1
  141. package/dist/components/LpDataList.vue.js +1 -1
  142. package/dist/components/LpDatePicker.vue.js +1 -1
  143. package/dist/components/LpDateRangePicker.vue.js +1 -1
  144. package/dist/components/LpDisclosure.vue.js +1 -1
  145. package/dist/components/LpDock.vue.js +1 -1
  146. package/dist/components/LpDrawer.vue.js +1 -1
  147. package/dist/components/LpDropdownMenu.vue.js +1 -1
  148. package/dist/components/LpDropzone.vue.js +2 -2
  149. package/dist/components/LpEditable.vue.js +1 -1
  150. package/dist/components/LpEmptyState.vue.d.ts +2 -0
  151. package/dist/components/LpEmptyState.vue.js +1 -1
  152. package/dist/components/LpFieldNotice.vue.js +1 -1
  153. package/dist/components/LpFileTree.vue.js +1 -1
  154. package/dist/components/LpFileTreeNode.vue.js +1 -1
  155. package/dist/components/LpFormField.vue.js +1 -1
  156. package/dist/components/LpGauge.vue.js +1 -1
  157. package/dist/components/LpHintLayer.vue.js +1 -1
  158. package/dist/components/LpHints.vue.js +1 -1
  159. package/dist/components/LpIcon.vue.js +1 -1
  160. package/dist/components/LpImageEditor.vue.js +2 -2
  161. package/dist/components/LpInfraNode.vue.js +1 -1
  162. package/dist/components/LpInput.vue.js +1 -1
  163. package/dist/components/LpLightbox.vue.js +1 -1
  164. package/dist/components/LpLoader.vue.js +1 -1
  165. package/dist/components/LpLogViewer.vue.d.ts +1 -1
  166. package/dist/components/LpLogViewer.vue.js +1 -1
  167. package/dist/components/LpMapPicker.vue.js +1 -1
  168. package/dist/components/LpMediaGallery.vue.js +1 -1
  169. package/dist/components/LpModal.vue.js +1 -1
  170. package/dist/components/LpModalNav.vue.js +1 -1
  171. package/dist/components/LpNotificationBell.vue.js +1 -1
  172. package/dist/components/LpNumberField.vue.js +1 -1
  173. package/dist/components/LpNumberFlow.vue.js +1 -1
  174. package/dist/components/LpPagination.vue.js +1 -1
  175. package/dist/components/LpPaletteFacts.vue.js +2 -2
  176. package/dist/components/LpPaletteHeader.vue.js +2 -2
  177. package/dist/components/LpPaletteStats.vue.js +2 -2
  178. package/dist/components/LpPaletteTheme.vue.d.ts +2 -0
  179. package/dist/components/LpPaletteTheme.vue.js +1 -1
  180. package/dist/components/LpPasswordInput.vue.js +1 -1
  181. package/dist/components/LpPhoneInput.vue.js +1 -1
  182. package/dist/components/LpPie.vue.js +1 -1
  183. package/dist/components/LpPipeline.vue.js +1 -1
  184. package/dist/components/LpProgress.vue.js +1 -1
  185. package/dist/components/LpQuota.vue.js +1 -1
  186. package/dist/components/LpRadioGroup.vue.js +1 -1
  187. package/dist/components/LpRangeCalendar.vue.js +1 -1
  188. package/dist/components/LpRelativeTime.vue.js +1 -1
  189. package/dist/components/LpRepeater.vue.js +1 -1
  190. package/dist/components/LpRollingText.vue.d.ts +2 -2
  191. package/dist/components/LpRollingText.vue.js +1 -1
  192. package/dist/components/LpScramble.vue.js +1 -1
  193. package/dist/components/LpSecretField.vue.js +1 -1
  194. package/dist/components/LpSection.vue.js +1 -1
  195. package/dist/components/LpSegmented.vue.js +1 -1
  196. package/dist/components/LpSelect.vue.js +1 -1
  197. package/dist/components/LpShift.vue.d.ts +20 -0
  198. package/dist/components/LpShift.vue.js +1 -1
  199. package/dist/components/LpShortcutsDialog.vue.js +1 -1
  200. package/dist/components/LpSidebar.vue.d.ts +74 -23
  201. package/dist/components/LpSidebar.vue.js +1 -1
  202. package/dist/components/LpSidebarNav.vue.d.ts +30 -2
  203. package/dist/components/LpSidebarNav.vue.js +1 -1
  204. package/dist/components/LpSidebarRow.vue.d.ts +49 -0
  205. package/dist/components/LpSidebarRow.vue.js +4 -0
  206. package/dist/components/LpStat.vue.d.ts +11 -0
  207. package/dist/components/LpStat.vue.js +1 -1
  208. package/dist/components/LpStatus.vue.js +1 -1
  209. package/dist/components/LpStepMark.vue.js +1 -1
  210. package/dist/components/LpStepper.vue.js +1 -1
  211. package/dist/components/LpSwap.vue.js +1 -1
  212. package/dist/components/LpSwitch.vue.js +1 -1
  213. package/dist/components/LpTabFace.vue.d.ts +14 -0
  214. package/dist/components/LpTabFace.vue.js +4 -0
  215. package/dist/components/LpTable.vue.js +11 -11
  216. package/dist/components/LpTableFilter.vue.js +1 -1
  217. package/dist/components/LpTabs.vue.d.ts +12 -4
  218. package/dist/components/LpTabs.vue.js +22 -74
  219. package/dist/components/LpTagsInput.vue.js +1 -1
  220. package/dist/components/LpTextarea.vue.d.ts +19 -1
  221. package/dist/components/LpTextarea.vue.js +1 -1
  222. package/dist/components/LpThemeProvider.vue.js +1 -1
  223. package/dist/components/LpThemeStudio.vue.d.ts +2 -2
  224. package/dist/components/LpThemeStudio.vue.js +1 -1
  225. package/dist/components/LpThemeStudioSection.vue.d.ts +4 -1
  226. package/dist/components/LpThemeStudioSection.vue.js +1 -1
  227. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  228. package/dist/components/LpTimeField.vue.js +1 -1
  229. package/dist/components/LpToaster.vue.js +1 -1
  230. package/dist/components/LpTopologyCanvas.vue.d.ts +3 -1
  231. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  232. package/dist/components/LpTour.vue.js +1 -1
  233. package/dist/components/LpTruncate.vue.js +1 -1
  234. package/dist/components/LpUptimeBar.vue.js +1 -1
  235. package/dist/components/MenuTitle.vue.js +1 -1
  236. package/dist/components/OptionContent.vue.js +1 -1
  237. package/dist/components/PickerField.vue.js +1 -1
  238. package/dist/components/RevealToggle.vue.js +1 -1
  239. package/dist/components/TourCard.vue.js +1 -1
  240. package/dist/components/chart.d.ts +14 -0
  241. package/dist/components/chart.js +13 -0
  242. package/dist/components/format.d.ts +10 -3
  243. package/dist/components/format.js +14 -2
  244. package/dist/components/menuWhen.js +1 -1
  245. package/dist/components/rolling.d.ts +5 -0
  246. package/dist/components/rolling.js +23 -0
  247. package/dist/components/sidebar.d.ts +33 -0
  248. package/dist/components/tabs.d.ts +3 -0
  249. package/dist/components/tabs.js +6 -0
  250. package/dist/composables/usePaletteCommands.js +1 -0
  251. package/dist/composables/useReveal.js +1 -22
  252. package/dist/icons-all.js +1 -1
  253. package/dist/index.d.ts +2 -1
  254. package/dist/index.js +156 -154
  255. package/dist/theme/palette.d.ts +3 -0
  256. package/package.json +1 -1
  257. package/src/component-names.ts +1 -0
  258. package/src/components/LpAppShell.vue +75 -7
  259. package/src/components/LpBottomNav.vue +84 -0
  260. package/src/components/LpChart.vue +23 -3
  261. package/src/components/LpColorPicker.vue +32 -1
  262. package/src/components/LpCommandPalette.vue +23 -5
  263. package/src/components/LpEmptyState.vue +4 -1
  264. package/src/components/LpNumberFlow.vue +23 -9
  265. package/src/components/LpPaletteTheme.vue +3 -3
  266. package/src/components/LpRollingText.vue +27 -2
  267. package/src/components/LpSegmented.vue +3 -1
  268. package/src/components/LpSelect.vue +5 -4
  269. package/src/components/LpShift.vue +174 -2
  270. package/src/components/LpSidebar.vue +304 -18
  271. package/src/components/LpSidebarNav.vue +200 -70
  272. package/src/components/LpSidebarRow.vue +238 -0
  273. package/src/components/LpStat.vue +12 -4
  274. package/src/components/LpTabFace.vue +52 -0
  275. package/src/components/LpTabs.vue +15 -42
  276. package/src/components/LpTextarea.vue +34 -4
  277. package/src/components/LpThemeStudio.vue +92 -56
  278. package/src/components/LpThemeStudioSection.vue +15 -7
  279. package/src/components/LpThemeSwitcher.vue +4 -1
  280. package/src/components/LpTopologyCanvas.vue +35 -4
  281. package/src/components/chart.ts +26 -0
  282. package/src/components/format.ts +31 -5
  283. package/src/components/rolling.ts +28 -0
  284. package/src/components/sidebar.ts +33 -0
  285. package/src/components/tabs.ts +9 -0
  286. package/src/composables/usePaletteCommands.ts +3 -0
  287. package/src/composables/useReveal.ts +7 -30
  288. package/src/index.ts +2 -1
  289. package/src/kit-icons.ts +1 -1
  290. package/src/theme/palette.ts +4 -2
  291. package/dist/assets/LpTabs-CO3EcsNV.css +0 -18
  292. package/dist/chunks/LpRollingText-DiL717LK.js +0 -51
  293. package/dist/chunks/LpShift-DXNsauQZ.js +0 -40
  294. package/dist/chunks/LpSidebar-D44peKq2.js +0 -256
  295. package/dist/chunks/LpSidebarNav--VwkXO_a.js +0 -211
  296. package/dist/chunks/LpThemeProvider-DcbfOxsU.js +0 -69
  297. package/dist/chunks/LpThemeStudioSection-BwhqYDLf.js +0 -20
@@ -0,0 +1,494 @@
1
+ import { defineComponent, computed, ref, useId, openBlock, createElementBlock, Fragment, createElementVNode, mergeProps, unref, normalizeClass, createCommentVNode, toDisplayString, renderSlot, createBlock, withCtx, createVNode, createSlots, normalizeProps, guardReactiveProps, nextTick } from "vue";
2
+ import { useHotkeys, parseCombo } from "../composables/useHotkeys.js";
3
+ import { usePersisted } from "../composables/usePersisted.js";
4
+ import { useLabels } from "../composables/useLpConfig.js";
5
+ import { _ as _sfc_main$5 } from "./LpDrawer-RRamxbLV.js";
6
+ import { _ as _sfc_main$2 } from "./LpIcon--5WSb3jJ.js";
7
+ import { _ as _sfc_main$3 } from "./LpInput-1eNvtzXs.js";
8
+ import { _ as _sfc_main$1 } from "./LpTooltip-BcBvIx4z.js";
9
+ import { _ as _sfc_main$4 } from "./LpSidebarNav-BzNWMZfc.js";
10
+ const _hoisted_1 = ["data-compact", "aria-label"];
11
+ const _hoisted_2 = {
12
+ key: 0,
13
+ class: "flex w-16 shrink-0 justify-center"
14
+ };
15
+ const _hoisted_3 = ["aria-label"];
16
+ const _hoisted_4 = ["aria-label", "aria-pressed"];
17
+ const _hoisted_5 = {
18
+ key: 0,
19
+ class: "truncate"
20
+ };
21
+ const _hoisted_6 = {
22
+ key: 7,
23
+ class: "mt-2 shrink-0 overflow-hidden border-t border-line pt-3"
24
+ };
25
+ const _hoisted_7 = {
26
+ key: 0,
27
+ class: "flex w-12 justify-center"
28
+ };
29
+ const _hoisted_8 = ["aria-label", "title"];
30
+ const _hoisted_9 = ["aria-label"];
31
+ const _hoisted_10 = {
32
+ key: 2,
33
+ class: "mt-2 flex shrink-0 flex-col gap-2"
34
+ };
35
+ const _hoisted_11 = {
36
+ key: 3,
37
+ class: "mt-2 shrink-0 border-t border-line pt-3"
38
+ };
39
+ const DEFAULT_WIDTH = 240;
40
+ const COMPACT_WIDTH = 64;
41
+ const FOLD_AT = 132;
42
+ const _sfc_main = /* @__PURE__ */ defineComponent({
43
+ ...{ inheritAttrs: false },
44
+ __name: "LpSidebar",
45
+ props: {
46
+ modelValue: {},
47
+ items: {},
48
+ sections: {},
49
+ isActive: {},
50
+ searchable: { type: Boolean },
51
+ searchPlaceholder: {},
52
+ labels: {},
53
+ search: {},
54
+ loading: { type: Boolean },
55
+ skeletonRows: { default: 6 },
56
+ skeletonHeader: { type: Boolean, default: true },
57
+ responsive: { type: Boolean, default: false },
58
+ open: { type: Boolean },
59
+ mobileBreakpoint: { default: "md" },
60
+ edgeOpen: { type: Boolean },
61
+ divider: { type: Boolean, default: true },
62
+ variant: { default: "rail" },
63
+ width: {},
64
+ collapsed: {},
65
+ persist: {},
66
+ autoCollapseAfter: { default: 14 },
67
+ hoverFollow: { type: Boolean, default: false },
68
+ compact: { type: Boolean, default: void 0 },
69
+ resizable: { type: Boolean },
70
+ minWidth: { default: 180 },
71
+ maxWidth: { default: 420 },
72
+ compactHotkey: { type: [String, Boolean], default: "Ctrl+B" },
73
+ pinnable: { type: Boolean },
74
+ pinned: {},
75
+ previewDelay: { default: 900 },
76
+ environment: {},
77
+ hints: {}
78
+ },
79
+ emits: ["update:modelValue", "update:open", "update:collapsed", "select", "update:search", "update:compact", "update:pinned"],
80
+ setup(__props, { emit: __emit }) {
81
+ const props = __props;
82
+ const emit = __emit;
83
+ const text = useLabels(
84
+ "sidebar",
85
+ {
86
+ nav: "Sidebar",
87
+ search: "Search",
88
+ pinned: "Pinned",
89
+ pin: "Pin to top",
90
+ unpin: "Unpin",
91
+ expand: "Show the pages under it",
92
+ compact: "Collapse the sidebar",
93
+ expandRail: "Expand the sidebar",
94
+ resize: "Drag to resize, double-click to reset"
95
+ },
96
+ () => props.labels
97
+ );
98
+ const placeholder = computed(() => props.searchPlaceholder ?? text.value.search);
99
+ function withNews(item) {
100
+ const children = item.children?.map(withNews);
101
+ const pages = item.hintPage === void 0 ? [] : Array.isArray(item.hintPage) ? item.hintPage : [item.hintPage];
102
+ const fresh = !!props.hints && pages.some((p) => props.hints.unreadNews(p).length > 0);
103
+ return fresh || children ? { ...item, children, dot: item.dot || fresh } : item;
104
+ }
105
+ const allGroups = computed(() => {
106
+ const groups2 = props.sections ?? (props.items ? [{ items: props.items }] : []);
107
+ return props.hints ? groups2.map((g) => ({ ...g, items: g.items.map(withNews) })) : groups2;
108
+ });
109
+ const ownSearch = ref("");
110
+ const query = computed({
111
+ get: () => props.search ?? ownSearch.value,
112
+ set: (v) => {
113
+ ownSearch.value = v;
114
+ emit("update:search", v);
115
+ }
116
+ });
117
+ function normalise(s) {
118
+ return s.normalize("NFD").replace(new RegExp("\\p{Diacritic}", "gu"), "").toLowerCase();
119
+ }
120
+ function matches(item, needle) {
121
+ if (normalise(item.label).includes(needle)) return true;
122
+ return (item.keywords ?? []).some((k) => normalise(k).includes(needle));
123
+ }
124
+ function narrowed(item, needle) {
125
+ if (matches(item, needle)) return item;
126
+ const children = (item.children ?? []).filter((c) => matches(c, needle));
127
+ return children.length ? { ...item, children } : null;
128
+ }
129
+ const groups = computed(() => {
130
+ const needle = normalise(query.value.trim());
131
+ if (!needle) return allGroups.value;
132
+ return allGroups.value.map((section) => ({
133
+ ...section,
134
+ items: section.items.map((i) => narrowed(i, needle)).filter((i) => i !== null)
135
+ })).filter((section) => section.items.length > 0);
136
+ });
137
+ const filtering = computed(() => query.value.trim().length > 0);
138
+ function itemActive(item) {
139
+ return props.isActive ? props.isActive(item) : item.id === props.modelValue;
140
+ }
141
+ function keyOf(section) {
142
+ return section.key ?? section.title ?? "";
143
+ }
144
+ const ownCollapsed = usePersisted(
145
+ () => props.persist && `lp-sidebar:${props.persist}`,
146
+ null,
147
+ { validate: (value) => value === null || Array.isArray(value) && value.every((k) => typeof k === "string") }
148
+ );
149
+ const navLength = computed(
150
+ () => groups.value.reduce((n, g) => n + g.items.length + (g.title ? 1 : 0), 0)
151
+ );
152
+ const autoCollapsed = computed(() => {
153
+ const limit = props.autoCollapseAfter;
154
+ if (!limit || navLength.value <= limit) return [];
155
+ return groups.value.filter((g) => g.collapsible && !g.items.some((i) => itemActive(i) || !!i.children?.some(itemActive))).map(keyOf).filter(Boolean);
156
+ });
157
+ const collapsedKeys = computed(
158
+ () => (
159
+ // Nothing stays folded while a query is on: a section that matched but is
160
+ // closed looks exactly like a section that did not match, and the person is
161
+ // typing precisely because they cannot find the thing by eye.
162
+ filtering.value ? [] : props.collapsed ?? ownCollapsed.value ?? autoCollapsed.value
163
+ )
164
+ );
165
+ function toggleSection(key, collapsed) {
166
+ const next = collapsed ? [.../* @__PURE__ */ new Set([...collapsedKeys.value, key])] : collapsedKeys.value.filter((k) => k !== key);
167
+ ownCollapsed.value = next;
168
+ emit("update:collapsed", next);
169
+ }
170
+ const ownCompact = usePersisted(() => props.persist && `lp-sidebar:${props.persist}:compact`, false);
171
+ const isCompact = computed(() => props.compact ?? ownCompact.value);
172
+ function setCompact(value) {
173
+ ownCompact.value = value;
174
+ emit("update:compact", value);
175
+ }
176
+ const ENV_TONE = {
177
+ warning: "bg-accent text-ink-inverse",
178
+ danger: "bg-danger text-white",
179
+ action: "bg-action text-ink-inverse",
180
+ brand: "bg-brand text-ink-inverse"
181
+ };
182
+ const env = computed(() => {
183
+ const e = props.environment;
184
+ if (!e) return null;
185
+ const { label, tone = "warning" } = typeof e === "string" ? { label: e } : e;
186
+ return { label, tone: ENV_TONE[tone] };
187
+ });
188
+ const ownWidth = usePersisted(() => props.resizable && props.persist && `lp-sidebar:${props.persist}:width`, DEFAULT_WIDTH);
189
+ const dragging = ref(false);
190
+ const railWidth = computed(() => {
191
+ if (isCompact.value) return `${COMPACT_WIDTH}px`;
192
+ if (props.resizable) return `${ownWidth.value}px`;
193
+ return props.width;
194
+ });
195
+ function startResize(event) {
196
+ if (event.button !== 0) return;
197
+ const handle = event.currentTarget;
198
+ handle.setPointerCapture(event.pointerId);
199
+ const from = event.clientX;
200
+ const start = isCompact.value ? COMPACT_WIDTH : ownWidth.value;
201
+ dragging.value = true;
202
+ const move = (e) => {
203
+ const wanted = start + (e.clientX - from);
204
+ if (wanted < FOLD_AT) {
205
+ if (!isCompact.value) setCompact(true);
206
+ if (start !== COMPACT_WIDTH) ownWidth.value = start;
207
+ return;
208
+ }
209
+ if (isCompact.value) setCompact(false);
210
+ ownWidth.value = Math.round(Math.min(props.maxWidth, Math.max(props.minWidth, wanted)));
211
+ };
212
+ const stop = () => {
213
+ dragging.value = false;
214
+ handle.removeEventListener("pointermove", move);
215
+ handle.removeEventListener("pointerup", stop);
216
+ handle.removeEventListener("pointercancel", stop);
217
+ };
218
+ handle.addEventListener("pointermove", move);
219
+ handle.addEventListener("pointerup", stop);
220
+ handle.addEventListener("pointercancel", stop);
221
+ }
222
+ const railEl = ref(null);
223
+ async function searchFromCompact() {
224
+ setCompact(false);
225
+ await nextTick();
226
+ railEl.value?.querySelector("input")?.focus();
227
+ }
228
+ function resetWidth() {
229
+ ownWidth.value = DEFAULT_WIDTH;
230
+ setCompact(false);
231
+ }
232
+ useHotkeys(
233
+ () => props.resizable && props.compactHotkey ? [
234
+ {
235
+ ...parseCombo(props.compactHotkey),
236
+ help: { group: text.value.nav, label: text.value.compact, combo: props.compactHotkey },
237
+ handler: () => setCompact(!isCompact.value)
238
+ }
239
+ ] : []
240
+ );
241
+ const ownPinned = usePersisted(() => props.persist && `lp-sidebar:${props.persist}:pinned`, [], {
242
+ validate: (value) => Array.isArray(value) && value.every((k) => typeof k === "string")
243
+ });
244
+ const pinnedIds = computed(() => props.pinned ?? ownPinned.value);
245
+ const everyItem = computed(() => allGroups.value.flatMap((g) => g.items.flatMap((i) => [i, ...i.children ?? []])));
246
+ const pinnedItems = computed(
247
+ () => props.pinnable ? pinnedIds.value.map((id) => everyItem.value.find((i) => i.id === id)).filter((i) => !!i) : []
248
+ );
249
+ function togglePin(id) {
250
+ const next = pinnedIds.value.includes(id) ? pinnedIds.value.filter((k) => k !== id) : [...pinnedIds.value, id];
251
+ ownPinned.value = next;
252
+ emit("update:pinned", next);
253
+ }
254
+ function activate(item) {
255
+ if (item.disabled) return;
256
+ emit("update:modelValue", item.id);
257
+ emit("select", item);
258
+ if (props.responsive && props.open) emit("update:open", false);
259
+ }
260
+ const baseId = `lp-sidebar-${useId()}`;
261
+ const railPillId = `${baseId}-rail`;
262
+ const drawerPillId = `${baseId}-drawer`;
263
+ const RAIL_VISIBILITY = {
264
+ sm: "hidden sm:flex",
265
+ md: "hidden md:flex",
266
+ lg: "hidden lg:flex",
267
+ xl: "hidden xl:flex"
268
+ };
269
+ const railClass = computed(
270
+ () => props.responsive ? RAIL_VISIBILITY[props.mobileBreakpoint] : "flex"
271
+ );
272
+ const chromeClass = computed(
273
+ () => props.variant === "panel" ? "rounded-card border border-line bg-surface-raised" : "border-r border-line bg-surface-raised"
274
+ );
275
+ return (_ctx, _cache) => {
276
+ return openBlock(), createElementBlock(Fragment, null, [
277
+ createElementVNode("nav", mergeProps({
278
+ ref_key: "railEl",
279
+ ref: railEl,
280
+ class: ["relative h-full shrink-0 flex-col gap-1", [
281
+ railClass.value,
282
+ chromeClass.value,
283
+ isCompact.value ? "px-2 py-3" : "p-3",
284
+ railWidth.value ? "" : "w-60",
285
+ dragging.value ? "" : "transition-[width] duration-(--duration-medium) ease-[var(--ease-emphasized)] motion-reduce:transition-none"
286
+ ]],
287
+ style: railWidth.value ? { width: railWidth.value } : void 0,
288
+ "data-compact": isCompact.value || void 0,
289
+ "aria-label": unref(text).nav
290
+ }, _ctx.$attrs), [
291
+ env.value ? (openBlock(), createElementBlock("div", {
292
+ key: 0,
293
+ class: normalizeClass(["pointer-events-none absolute inset-x-0 top-0 z-20 h-[3px]", env.value.tone])
294
+ }, null, 2)) : createCommentVNode("", true),
295
+ env.value && !isCompact.value ? (openBlock(), createElementBlock("span", {
296
+ key: 1,
297
+ class: normalizeClass(["pointer-events-none absolute left-1/2 top-0 z-20 -translate-x-1/2 rounded-b-small px-2 pb-0.5 text-[10px] font-semibold uppercase tracking-wide", env.value.tone])
298
+ }, toDisplayString(env.value.label), 3)) : createCommentVNode("", true),
299
+ _ctx.$slots.header ? (openBlock(), createElementBlock("div", {
300
+ key: 2,
301
+ class: normalizeClass(["mb-3 flex shrink-0 items-center", [
302
+ __props.variant === "panel" ? "pb-3" : isCompact.value ? "-mx-2 -mt-3 h-16 overflow-hidden" : "-mx-3 -mt-3 h-16 px-3",
303
+ __props.divider ? "border-b border-line" : ""
304
+ ]])
305
+ }, [
306
+ isCompact.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
307
+ renderSlot(_ctx.$slots, "header", { compact: true })
308
+ ])) : renderSlot(_ctx.$slots, "header", {
309
+ key: 1,
310
+ compact: false
311
+ })
312
+ ], 2)) : createCommentVNode("", true),
313
+ __props.searchable && isCompact.value ? (openBlock(), createBlock(_sfc_main$1, {
314
+ key: 3,
315
+ content: placeholder.value,
316
+ side: "right"
317
+ }, {
318
+ default: withCtx(() => [
319
+ createElementVNode("button", {
320
+ type: "button",
321
+ class: "mb-2 ml-1 grid size-10 shrink-0 place-items-center rounded-control text-muted outline-none transition-colors hover:bg-ink/[0.05] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
322
+ "aria-label": placeholder.value,
323
+ onClick: searchFromCompact
324
+ }, [
325
+ createVNode(_sfc_main$2, {
326
+ name: "lucide:search",
327
+ size: 17
328
+ })
329
+ ], 8, _hoisted_3)
330
+ ]),
331
+ _: 1
332
+ }, 8, ["content"])) : createCommentVNode("", true),
333
+ __props.searchable && !isCompact.value ? (openBlock(), createBlock(_sfc_main$3, {
334
+ key: 4,
335
+ modelValue: query.value,
336
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => query.value = $event),
337
+ size: "sm",
338
+ icon: "lucide:search",
339
+ clearable: "",
340
+ class: "mb-2 shrink-0",
341
+ placeholder: placeholder.value,
342
+ "aria-label": placeholder.value
343
+ }, null, 8, ["modelValue", "placeholder", "aria-label"])) : createCommentVNode("", true),
344
+ createVNode(_sfc_main$4, {
345
+ groups: groups.value,
346
+ "pill-id": railPillId,
347
+ compact: isCompact.value,
348
+ pinnable: __props.pinnable,
349
+ pinned: pinnedItems.value,
350
+ "preview-delay": __props.previewDelay,
351
+ labels: unref(text),
352
+ "item-active": itemActive,
353
+ loading: __props.loading,
354
+ "skeleton-rows": __props.skeletonRows,
355
+ "skeleton-header": __props.skeletonHeader,
356
+ "collapsed-keys": collapsedKeys.value,
357
+ "hover-follow": __props.hoverFollow,
358
+ onActivate: activate,
359
+ onToggleSection: toggleSection,
360
+ onTogglePin: togglePin
361
+ }, createSlots({ _: 2 }, [
362
+ _ctx.$slots.item ? {
363
+ name: "item",
364
+ fn: withCtx((slotProps) => [
365
+ renderSlot(_ctx.$slots, "item", normalizeProps(guardReactiveProps(slotProps)))
366
+ ]),
367
+ key: "0"
368
+ } : void 0
369
+ ]), 1032, ["groups", "compact", "pinnable", "pinned", "preview-delay", "labels", "loading", "skeleton-rows", "skeleton-header", "collapsed-keys", "hover-follow"]),
370
+ __props.resizable ? (openBlock(), createBlock(_sfc_main$1, {
371
+ key: 5,
372
+ content: isCompact.value ? unref(text).expandRail : unref(text).compact,
373
+ side: "right"
374
+ }, {
375
+ default: withCtx(() => [
376
+ createElementVNode("button", {
377
+ type: "button",
378
+ class: normalizeClass(["mt-1 flex h-8 shrink-0 items-center gap-2 rounded-control px-3 text-xs text-muted outline-none transition-colors hover:bg-ink/[0.05] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring", isCompact.value ? "ml-1 w-10 justify-center px-0" : ""]),
379
+ "aria-label": isCompact.value ? unref(text).expandRail : unref(text).compact,
380
+ "aria-pressed": isCompact.value,
381
+ onClick: _cache[1] || (_cache[1] = ($event) => setCompact(!isCompact.value))
382
+ }, [
383
+ createVNode(_sfc_main$2, {
384
+ name: isCompact.value ? "lucide:panel-left-open" : "lucide:panel-left-close",
385
+ size: 16,
386
+ class: "shrink-0"
387
+ }, null, 8, ["name"]),
388
+ !isCompact.value ? (openBlock(), createElementBlock("span", _hoisted_5, toDisplayString(unref(text).compact), 1)) : createCommentVNode("", true)
389
+ ], 10, _hoisted_4)
390
+ ]),
391
+ _: 1
392
+ }, 8, ["content"])) : createCommentVNode("", true),
393
+ _ctx.$slots.actions ? (openBlock(), createElementBlock("div", {
394
+ key: 6,
395
+ class: normalizeClass(["mt-2 flex shrink-0 flex-col gap-2", isCompact.value ? "w-12 items-center" : ""])
396
+ }, [
397
+ renderSlot(_ctx.$slots, "actions", { compact: isCompact.value })
398
+ ], 2)) : createCommentVNode("", true),
399
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_6, [
400
+ isCompact.value ? (openBlock(), createElementBlock("div", _hoisted_7, [
401
+ renderSlot(_ctx.$slots, "footer", { compact: true })
402
+ ])) : renderSlot(_ctx.$slots, "footer", {
403
+ key: 1,
404
+ compact: false
405
+ })
406
+ ])) : createCommentVNode("", true),
407
+ __props.resizable && __props.variant === "rail" ? (openBlock(), createElementBlock("div", {
408
+ key: 8,
409
+ role: "separator",
410
+ "aria-orientation": "vertical",
411
+ "aria-label": unref(text).resize,
412
+ title: unref(text).resize,
413
+ class: "group/resize absolute inset-y-0 -right-1.5 z-10 w-3 cursor-col-resize touch-none",
414
+ onPointerdown: startResize,
415
+ onDblclick: resetWidth
416
+ }, [
417
+ createElementVNode("span", {
418
+ class: normalizeClass(["absolute inset-y-0 left-1/2 w-0.5 -translate-x-1/2 bg-brand opacity-0 transition-opacity duration-(--duration-fast) group-hover/resize:opacity-60", dragging.value ? "!opacity-100" : ""])
419
+ }, null, 2)
420
+ ], 40, _hoisted_8)) : createCommentVNode("", true)
421
+ ], 16, _hoisted_1),
422
+ __props.responsive ? (openBlock(), createBlock(_sfc_main$5, {
423
+ key: 0,
424
+ open: __props.open,
425
+ direction: "left",
426
+ size: "sm",
427
+ "edge-open": __props.edgeOpen,
428
+ "edge-breakpoint": __props.mobileBreakpoint,
429
+ "onUpdate:open": _cache[3] || (_cache[3] = (v) => emit("update:open", v))
430
+ }, {
431
+ default: withCtx(() => [
432
+ createElementVNode("nav", {
433
+ class: "flex h-full flex-col gap-1",
434
+ "aria-label": unref(text).nav
435
+ }, [
436
+ _ctx.$slots.header ? (openBlock(), createElementBlock("div", {
437
+ key: 0,
438
+ class: normalizeClass(["shrink-0", __props.divider ? "mb-3 border-b border-line pb-3" : "mb-2"])
439
+ }, [
440
+ renderSlot(_ctx.$slots, "header")
441
+ ], 2)) : createCommentVNode("", true),
442
+ __props.searchable ? (openBlock(), createBlock(_sfc_main$3, {
443
+ key: 1,
444
+ modelValue: query.value,
445
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => query.value = $event),
446
+ size: "sm",
447
+ icon: "lucide:search",
448
+ clearable: "",
449
+ class: "mb-2 shrink-0",
450
+ placeholder: placeholder.value,
451
+ "aria-label": placeholder.value
452
+ }, null, 8, ["modelValue", "placeholder", "aria-label"])) : createCommentVNode("", true),
453
+ createVNode(_sfc_main$4, {
454
+ groups: groups.value,
455
+ "pill-id": drawerPillId,
456
+ pinnable: __props.pinnable,
457
+ pinned: pinnedItems.value,
458
+ "preview-delay": __props.previewDelay,
459
+ labels: unref(text),
460
+ "item-active": itemActive,
461
+ loading: __props.loading,
462
+ "skeleton-rows": __props.skeletonRows,
463
+ "skeleton-header": __props.skeletonHeader,
464
+ "collapsed-keys": collapsedKeys.value,
465
+ "hover-follow": __props.hoverFollow,
466
+ onActivate: activate,
467
+ onToggleSection: toggleSection,
468
+ onTogglePin: togglePin
469
+ }, createSlots({ _: 2 }, [
470
+ _ctx.$slots.item ? {
471
+ name: "item",
472
+ fn: withCtx((slotProps) => [
473
+ renderSlot(_ctx.$slots, "item", normalizeProps(guardReactiveProps(slotProps)))
474
+ ]),
475
+ key: "0"
476
+ } : void 0
477
+ ]), 1032, ["groups", "pinnable", "pinned", "preview-delay", "labels", "loading", "skeleton-rows", "skeleton-header", "collapsed-keys", "hover-follow"]),
478
+ _ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_10, [
479
+ renderSlot(_ctx.$slots, "actions")
480
+ ])) : createCommentVNode("", true),
481
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_11, [
482
+ renderSlot(_ctx.$slots, "footer")
483
+ ])) : createCommentVNode("", true)
484
+ ], 8, _hoisted_9)
485
+ ]),
486
+ _: 3
487
+ }, 8, ["open", "edge-open", "edge-breakpoint"])) : createCommentVNode("", true)
488
+ ], 64);
489
+ };
490
+ }
491
+ });
492
+ export {
493
+ _sfc_main as _
494
+ };