@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
@@ -1,15 +1,16 @@
1
- import { shallowRef, computed, ref, watch, watchEffect, defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, unref, createBlock, withCtx, createVNode, createTextVNode, createCommentVNode, renderSlot, normalizeClass, normalizeStyle, Fragment, renderList } from "vue";
2
- import { u as usePaletteTheme } from "./palette-BiY7yQZL.js";
1
+ import { shallowRef, computed, ref, watch, watchEffect, defineComponent, openBlock, createElementBlock, unref, createElementVNode, toDisplayString, createBlock, withCtx, createVNode, createTextVNode, createCommentVNode, renderSlot, normalizeClass, Fragment, renderList, normalizeStyle, h } from "vue";
2
+ import { u as usePaletteTheme } from "./palette-Cvxl_1tM.js";
3
3
  import { useLabels } from "../composables/useLpConfig.js";
4
4
  import { usePersisted } from "../composables/usePersisted.js";
5
5
  import { parseColor, rgbToHex } from "../components/color.js";
6
- import { p as presets, u as useTheme, o as themeToCssRule, s as serializeTheme } from "./useTheme-BOV_-AiY.js";
7
- import { _ as _sfc_main$1 } from "./LpButton-BQDAFXBd.js";
8
- import { _ as _sfc_main$6 } from "./LpCodeBlock-Czu-fq1M.js";
9
- import { _ as _sfc_main$4 } from "./LpColorPicker-Ee1DZiRd.js";
10
- import { _ as _sfc_main$2 } from "./LpIcon-DkP-9mzK.js";
11
- import { _ as _sfc_main$5 } from "./LpSegmented-D2VST0o3.js";
12
- import { _ as _sfc_main$3 } from "./LpThemeStudioSection-BwhqYDLf.js";
6
+ import { p as presets, u as useTheme, o as themeToCssRule, s as serializeTheme, _ as _sfc_main$8 } from "./LpThemeProvider-8MG6yqU9.js";
7
+ import { _ as _sfc_main$1 } from "./LpButton-Dk7eT4ro.js";
8
+ import { _ as _sfc_main$7 } from "./LpCodeBlock-j0W5bpmF.js";
9
+ import { _ as _sfc_main$4 } from "./LpColorPicker-1y1QJHZR.js";
10
+ import { _ as _sfc_main$2 } from "./LpIcon--5WSb3jJ.js";
11
+ import { _ as _sfc_main$5 } from "./LpSegmented-CeACsMMA.js";
12
+ import { _ as _sfc_main$6 } from "./LpDisclosure-Cpa7Hc5T.js";
13
+ import { _ as _sfc_main$3 } from "./LpThemeStudioSection-B7bt8Iyg.js";
13
14
  function defineTheme(base, overrides = {}) {
14
15
  const src = typeof base === "string" ? presets[base] : base;
15
16
  return {
@@ -185,24 +186,28 @@ function create(key, config) {
185
186
  const preview = (draft) => ({ theme: build(draft), exported: exportState(draft) });
186
187
  return { state, themes, system, theme, brand, changed, exported, pickTheme, tune, reset, preview };
187
188
  }
188
- const _hoisted_1 = { class: "flex flex-col gap-4" };
189
- const _hoisted_2 = { class: "flex items-center justify-between" };
189
+ const _hoisted_1 = { class: "@container flex flex-col gap-4" };
190
+ const _hoisted_2 = {
191
+ key: 0,
192
+ class: "flex items-center justify-between"
193
+ };
190
194
  const _hoisted_3 = { class: "text-sm font-semibold text-ink" };
191
- const _hoisted_4 = { class: "grid grid-cols-4 gap-2" };
195
+ const _hoisted_4 = { class: "grid grid-cols-3 gap-2 @md:grid-cols-4 @2xl:grid-cols-8" };
192
196
  const _hoisted_5 = ["aria-pressed"];
193
- const _hoisted_6 = { class: "max-w-full truncate" };
194
- const _hoisted_7 = ["aria-pressed", "onClick"];
195
- const _hoisted_8 = { class: "max-w-full truncate" };
196
- const _hoisted_9 = { class: "flex flex-wrap items-center gap-1.5" };
197
- const _hoisted_10 = ["aria-label", "aria-pressed", "onClick"];
198
- const _hoisted_11 = {
199
- key: 5,
200
- class: "flex flex-col gap-2 border-t border-line pt-3"
197
+ const _hoisted_6 = { class: "absolute inset-0 [clip-path:polygon(100%_0,100%_100%,0_100%)]" };
198
+ const _hoisted_7 = { class: "max-w-full truncate" };
199
+ const _hoisted_8 = ["aria-pressed", "onClick"];
200
+ const _hoisted_9 = { class: "max-w-full truncate" };
201
+ const _hoisted_10 = { class: "flex flex-wrap items-center gap-2" };
202
+ const _hoisted_11 = ["aria-label", "aria-pressed", "onClick"];
203
+ const _hoisted_12 = {
204
+ key: 3,
205
+ class: "flex flex-col gap-1.5"
201
206
  };
202
- const _hoisted_12 = { class: "flex items-center justify-between gap-2" };
203
- const _hoisted_13 = { class: "text-[11px] font-medium tracking-wide text-muted uppercase" };
204
- const TILE = "flex min-w-0 flex-col items-center gap-1 rounded-control p-1.5 text-[11px] text-muted transition-colors duration-(--duration-fast) hover:bg-surface-soft hover:text-ink";
205
- const SWATCH = "relative size-8 overflow-hidden rounded-full ring-2 transition-[box-shadow] duration-(--duration-fast)";
207
+ const _hoisted_13 = { class: "text-xs font-medium text-muted-strong" };
208
+ const _hoisted_14 = { class: "flex flex-col gap-2 pt-1" };
209
+ const TILE = "group flex min-w-0 flex-col gap-1.5 text-left text-xs text-muted transition-colors duration-(--duration-fast) hover:text-ink aria-pressed:text-ink";
210
+ const FRAME = "relative block aspect-[8/5] w-full overflow-hidden rounded-control transition-[box-shadow] duration-(--duration-fast)";
206
211
  const _sfc_main = /* @__PURE__ */ defineComponent({
207
212
  __name: "LpThemeStudio",
208
213
  props: {
@@ -249,11 +254,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
249
254
  const r = event.currentTarget?.getBoundingClientRect();
250
255
  return r ? { x: r.left + r.width / 2, y: r.top + r.height / 2 } : void 0;
251
256
  }
257
+ const ring = (name) => state.value.theme === name ? "ring-2 ring-brand" : "ring-1 ring-line group-hover:ring-line-strong";
258
+ const tuned = (theme) => state.value.brand ? withBrand(theme, state.value.brand) : theme;
259
+ const Miniature = (p) => h(_sfc_main$8, { theme: p.theme, class: "absolute inset-0 flex bg-surface" }, () => [
260
+ h("span", { class: "h-full w-1/4 border-r border-line bg-surface-raised" }),
261
+ h("span", { class: "flex min-w-0 flex-1 flex-col gap-[10%] p-[10%]" }, [
262
+ h("span", { class: "h-[12%] w-3/4 rounded-full bg-ink/80" }),
263
+ h("span", { class: "h-[10%] w-1/2 rounded-full bg-muted/60" }),
264
+ h("span", { class: "mt-auto h-[24%] w-1/2 rounded-control bg-brand" })
265
+ ])
266
+ ]);
252
267
  const tuneTo = (key, value) => studio.tune({ [key]: value });
253
- usePaletteTheme(() => studio ?? void 0);
268
+ usePaletteTheme(() => studio ?? void 0, { hide: props.hide });
254
269
  return (_ctx, _cache) => {
255
270
  return openBlock(), createElementBlock("div", _hoisted_1, [
256
- createElementVNode("div", _hoisted_2, [
271
+ unref(text).title || unref(changed) ? (openBlock(), createElementBlock("div", _hoisted_2, [
257
272
  createElementVNode("p", _hoisted_3, toDisplayString(unref(text).title), 1),
258
273
  unref(changed) ? (openBlock(), createBlock(_sfc_main$1, {
259
274
  key: 0,
@@ -270,10 +285,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
270
285
  ]),
271
286
  _: 1
272
287
  })) : createCommentVNode("", true)
273
- ]),
288
+ ])) : createCommentVNode("", true),
274
289
  renderSlot(_ctx.$slots, "start", { studio: unref(studio) }),
275
290
  shows("themes") ? (openBlock(), createBlock(_sfc_main$3, {
276
- key: 0,
291
+ key: 1,
277
292
  label: unref(text).themes
278
293
  }, {
279
294
  default: withCtx(() => [
@@ -281,46 +296,52 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
281
296
  unref(studio).system.value ? (openBlock(), createElementBlock("button", {
282
297
  key: 0,
283
298
  type: "button",
284
- class: normalizeClass([TILE, unref(state).theme === unref(STUDIO_SYSTEM) && "bg-surface-soft text-ink"]),
299
+ class: normalizeClass(TILE),
285
300
  "aria-pressed": unref(state).theme === unref(STUDIO_SYSTEM),
286
301
  onClick: _cache[1] || (_cache[1] = ($event) => unref(studio).pickTheme(unref(STUDIO_SYSTEM), origin($event)))
287
302
  }, [
288
303
  createElementVNode("span", {
289
- class: normalizeClass([SWATCH, unref(state).theme === unref(STUDIO_SYSTEM) ? "ring-brand" : "ring-line"]),
290
- style: normalizeStyle({ background: `linear-gradient(135deg, ${unref(studio).system.value.light.colors.surface} 50%, ${unref(studio).system.value.dark.colors.surface} 50%)` })
291
- }, null, 6),
292
- createElementVNode("span", _hoisted_6, toDisplayString(unref(text).system), 1)
293
- ], 10, _hoisted_5)) : createCommentVNode("", true),
304
+ class: normalizeClass([FRAME, ring(unref(STUDIO_SYSTEM))])
305
+ }, [
306
+ createVNode(Miniature, {
307
+ theme: tuned(unref(studio).system.value.light)
308
+ }, null, 8, ["theme"]),
309
+ createElementVNode("span", _hoisted_6, [
310
+ createVNode(Miniature, {
311
+ theme: tuned(unref(studio).system.value.dark)
312
+ }, null, 8, ["theme"])
313
+ ])
314
+ ], 2),
315
+ createElementVNode("span", _hoisted_7, toDisplayString(unref(text).system), 1)
316
+ ], 8, _hoisted_5)) : createCommentVNode("", true),
294
317
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(studio).themes.value, (t) => {
295
318
  return openBlock(), createElementBlock("button", {
296
319
  key: t.name,
297
320
  type: "button",
298
- class: normalizeClass([TILE, unref(state).theme === t.name && "bg-surface-soft text-ink"]),
321
+ class: normalizeClass(TILE),
299
322
  "aria-pressed": unref(state).theme === t.name,
300
323
  onClick: ($event) => unref(studio).pickTheme(t.name, origin($event))
301
324
  }, [
302
325
  createElementVNode("span", {
303
- class: normalizeClass([SWATCH, unref(state).theme === t.name ? "ring-brand" : "ring-line"]),
304
- style: normalizeStyle({ background: t.colors.surface })
326
+ class: normalizeClass([FRAME, ring(t.name)])
305
327
  }, [
306
- createElementVNode("span", {
307
- class: "absolute inset-x-0 bottom-0 h-1/2",
308
- style: normalizeStyle({ background: t.colors.brand })
309
- }, null, 4)
310
- ], 6),
311
- createElementVNode("span", _hoisted_8, toDisplayString(t.name), 1)
312
- ], 10, _hoisted_7);
328
+ createVNode(Miniature, {
329
+ theme: tuned(t)
330
+ }, null, 8, ["theme"])
331
+ ], 2),
332
+ createElementVNode("span", _hoisted_9, toDisplayString(t.name), 1)
333
+ ], 8, _hoisted_8);
313
334
  }), 128))
314
335
  ])
315
336
  ]),
316
337
  _: 1
317
338
  }, 8, ["label"])) : createCommentVNode("", true),
318
339
  shows("brand") ? (openBlock(), createBlock(_sfc_main$3, {
319
- key: 1,
340
+ key: 2,
320
341
  label: unref(text).brand
321
342
  }, {
322
343
  default: withCtx(() => [
323
- createElementVNode("div", _hoisted_9, [
344
+ createElementVNode("div", _hoisted_10, [
324
345
  (openBlock(true), createElementBlock(Fragment, null, renderList(swatches.value, (color) => {
325
346
  return openBlock(), createElementBlock("button", {
326
347
  key: color,
@@ -330,79 +351,92 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
330
351
  "aria-label": `${unref(text).brand} ${color}`,
331
352
  "aria-pressed": unref(brand) === color,
332
353
  onClick: ($event) => setBrand(color)
333
- }, null, 14, _hoisted_10);
354
+ }, null, 14, _hoisted_11);
334
355
  }), 128)),
335
356
  createVNode(_sfc_main$4, {
336
- "model-value": unref(brand),
357
+ variant: "swatch",
337
358
  size: "sm",
359
+ selected: !swatches.value.includes(unref(brand)),
360
+ swatches: [],
361
+ "model-value": unref(brand),
338
362
  "aria-label": unref(text).anyBrand,
339
363
  "onUpdate:modelValue": setBrand
340
- }, null, 8, ["model-value", "aria-label"])
364
+ }, null, 8, ["selected", "model-value", "aria-label"])
341
365
  ])
342
366
  ]),
343
367
  _: 1
344
368
  }, 8, ["label"])) : createCommentVNode("", true),
345
- shows("corners") ? (openBlock(), createBlock(_sfc_main$3, {
346
- key: 2,
347
- label: unref(text).corners
348
- }, {
349
- default: withCtx(() => [
350
- createVNode(_sfc_main$5, {
351
- "model-value": unref(state).corners,
352
- size: "sm",
353
- options: [{ value: "sharp", label: unref(text).sharp }, { value: "default", label: unref(text).default }, { value: "round", label: unref(text).round }],
354
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => tuneTo("corners", $event))
355
- }, null, 8, ["model-value", "options"])
356
- ]),
357
- _: 1
358
- }, 8, ["label"])) : createCommentVNode("", true),
359
- shows("size") ? (openBlock(), createBlock(_sfc_main$3, {
360
- key: 3,
361
- label: unref(text).size
362
- }, {
363
- default: withCtx(() => [
364
- createVNode(_sfc_main$5, {
365
- "model-value": unref(state).size,
366
- size: "sm",
367
- options: [{ value: "compact", label: unref(text).compact }, { value: "default", label: unref(text).default }, { value: "comfortable", label: unref(text).comfortable }],
368
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => tuneTo("size", $event))
369
- }, null, 8, ["model-value", "options"])
369
+ shows("corners") || shows("size") || shows("motion") ? (openBlock(), createElementBlock("div", _hoisted_12, [
370
+ shows("corners") ? (openBlock(), createBlock(_sfc_main$3, {
371
+ key: 0,
372
+ inline: "",
373
+ label: unref(text).corners
374
+ }, {
375
+ default: withCtx(() => [
376
+ createVNode(_sfc_main$5, {
377
+ "model-value": unref(state).corners,
378
+ size: "sm",
379
+ options: [{ value: "sharp", label: unref(text).sharp }, { value: "default", label: unref(text).default }, { value: "round", label: unref(text).round }],
380
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => tuneTo("corners", $event))
381
+ }, null, 8, ["model-value", "options"])
382
+ ]),
383
+ _: 1
384
+ }, 8, ["label"])) : createCommentVNode("", true),
385
+ shows("size") ? (openBlock(), createBlock(_sfc_main$3, {
386
+ key: 1,
387
+ inline: "",
388
+ label: unref(text).size
389
+ }, {
390
+ default: withCtx(() => [
391
+ createVNode(_sfc_main$5, {
392
+ "model-value": unref(state).size,
393
+ size: "sm",
394
+ options: [{ value: "compact", label: unref(text).compact }, { value: "default", label: unref(text).default }, { value: "comfortable", label: unref(text).comfortable }],
395
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => tuneTo("size", $event))
396
+ }, null, 8, ["model-value", "options"])
397
+ ]),
398
+ _: 1
399
+ }, 8, ["label"])) : createCommentVNode("", true),
400
+ shows("motion") ? (openBlock(), createBlock(_sfc_main$3, {
401
+ key: 2,
402
+ inline: "",
403
+ label: unref(text).motion
404
+ }, {
405
+ default: withCtx(() => [
406
+ createVNode(_sfc_main$5, {
407
+ "model-value": unref(state).motion,
408
+ size: "sm",
409
+ options: [{ value: "fast", label: unref(text).fast }, { value: "normal", label: unref(text).normal }, { value: "slow", label: unref(text).slow }],
410
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => tuneTo("motion", $event))
411
+ }, null, 8, ["model-value", "options"])
412
+ ]),
413
+ _: 1
414
+ }, 8, ["label"])) : createCommentVNode("", true)
415
+ ])) : createCommentVNode("", true),
416
+ renderSlot(_ctx.$slots, "end", { studio: unref(studio) }),
417
+ shows("export") ? (openBlock(), createBlock(_sfc_main$6, { key: 4 }, {
418
+ trigger: withCtx(() => [
419
+ createElementVNode("span", _hoisted_13, toDisplayString(unref(text).export), 1)
370
420
  ]),
371
- _: 1
372
- }, 8, ["label"])) : createCommentVNode("", true),
373
- shows("motion") ? (openBlock(), createBlock(_sfc_main$3, {
374
- key: 4,
375
- label: unref(text).motion
376
- }, {
377
421
  default: withCtx(() => [
378
- createVNode(_sfc_main$5, {
379
- "model-value": unref(state).motion,
380
- size: "sm",
381
- options: [{ value: "fast", label: unref(text).fast }, { value: "normal", label: unref(text).normal }, { value: "slow", label: unref(text).slow }],
382
- "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => tuneTo("motion", $event))
383
- }, null, 8, ["model-value", "options"])
422
+ createElementVNode("div", _hoisted_14, [
423
+ createVNode(_sfc_main$5, {
424
+ modelValue: format.value,
425
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => format.value = $event),
426
+ size: "sm",
427
+ options: [{ value: "code", label: "Code" }, { value: "json", label: "JSON" }, { value: "css", label: "CSS" }]
428
+ }, null, 8, ["modelValue"]),
429
+ createVNode(_sfc_main$7, {
430
+ "model-value": unref(exported)[format.value],
431
+ lang: format.value === "json" ? "json" : format.value === "css" ? "plain" : "ts",
432
+ copyable: "",
433
+ height: "140px",
434
+ class: "text-[11px]"
435
+ }, null, 8, ["model-value", "lang"])
436
+ ])
384
437
  ]),
385
438
  _: 1
386
- }, 8, ["label"])) : createCommentVNode("", true),
387
- renderSlot(_ctx.$slots, "end", { studio: unref(studio) }),
388
- shows("export") ? (openBlock(), createElementBlock("div", _hoisted_11, [
389
- createElementVNode("div", _hoisted_12, [
390
- createElementVNode("span", _hoisted_13, toDisplayString(unref(text).export), 1),
391
- createVNode(_sfc_main$5, {
392
- modelValue: format.value,
393
- "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => format.value = $event),
394
- size: "sm",
395
- options: [{ value: "code", label: "Code" }, { value: "json", label: "JSON" }, { value: "css", label: "CSS" }]
396
- }, null, 8, ["modelValue"])
397
- ]),
398
- createVNode(_sfc_main$6, {
399
- "model-value": unref(exported)[format.value],
400
- lang: format.value === "json" ? "json" : format.value === "css" ? "plain" : "ts",
401
- copyable: "",
402
- height: "140px",
403
- class: "text-[11px]"
404
- }, null, 8, ["model-value", "lang"])
405
- ])) : createCommentVNode("", true)
439
+ })) : createCommentVNode("", true)
406
440
  ]);
407
441
  };
408
442
  }
@@ -0,0 +1,32 @@
1
+ import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, renderSlot } from "vue";
2
+ const _hoisted_1 = {
3
+ key: 0,
4
+ class: "flex min-h-8 flex-wrap items-center justify-between gap-x-4 gap-y-1.5"
5
+ };
6
+ const _hoisted_2 = { class: "text-xs font-medium text-muted-strong" };
7
+ const _hoisted_3 = {
8
+ key: 1,
9
+ class: "flex flex-col gap-2"
10
+ };
11
+ const _hoisted_4 = { class: "text-xs font-medium text-muted-strong" };
12
+ const _sfc_main = /* @__PURE__ */ defineComponent({
13
+ __name: "LpThemeStudioSection",
14
+ props: {
15
+ label: {},
16
+ inline: { type: Boolean }
17
+ },
18
+ setup(__props) {
19
+ return (_ctx, _cache) => {
20
+ return __props.inline ? (openBlock(), createElementBlock("div", _hoisted_1, [
21
+ createElementVNode("span", _hoisted_2, toDisplayString(__props.label), 1),
22
+ renderSlot(_ctx.$slots, "default")
23
+ ])) : (openBlock(), createElementBlock("div", _hoisted_3, [
24
+ createElementVNode("span", _hoisted_4, toDisplayString(__props.label), 1),
25
+ renderSlot(_ctx.$slots, "default")
26
+ ]));
27
+ };
28
+ }
29
+ });
30
+ export {
31
+ _sfc_main as _
32
+ };
@@ -1,15 +1,15 @@
1
1
  import { defineComponent, ref, useId, computed, onMounted, openBlock, createBlock, unref, withCtx, createVNode, createElementVNode, normalizeClass, createElementBlock, createCommentVNode, renderSlot, normalizeProps, guardReactiveProps } from "vue";
2
- import { u as usePaletteTheme } from "./palette-BiY7yQZL.js";
2
+ import { u as usePaletteTheme } from "./palette-Cvxl_1tM.js";
3
3
  import { PopoverRoot, PopoverAnchor, PopoverPortal, PopoverContent } from "reka-ui";
4
4
  import { useLabels } from "../composables/useLpConfig.js";
5
5
  import { usePortalTarget, useOutsideGuard } from "../composables/useView.js";
6
- import { u as useTheme, p as presets } from "./useTheme-BOV_-AiY.js";
7
- import { u as useThemeStudio, S as STUDIO_SYSTEM, _ as _sfc_main$5 } from "./LpThemeStudio-B2nPaG-h.js";
6
+ import { u as useTheme, p as presets } from "./LpThemeProvider-8MG6yqU9.js";
7
+ import { u as useThemeStudio, S as STUDIO_SYSTEM, _ as _sfc_main$5 } from "./LpThemeStudio-DWtG6OZZ.js";
8
8
  import { POPOVER_PANEL } from "../components/dropdown.js";
9
- import { _ as _sfc_main$1 } from "./LpContextMenu-DXpFJjlO.js";
10
- import { _ as _sfc_main$2 } from "./LpIcon-DkP-9mzK.js";
11
- import { _ as _sfc_main$4 } from "./LpRollingText-DiL717LK.js";
12
- import { _ as _sfc_main$3 } from "./LpShift-DXNsauQZ.js";
9
+ import { _ as _sfc_main$1 } from "./LpContextMenu-rx2tCjwk.js";
10
+ import { _ as _sfc_main$2 } from "./LpIcon--5WSb3jJ.js";
11
+ import { _ as _sfc_main$4 } from "./LpRollingText-B54Pje7P.js";
12
+ import { _ as _sfc_main$3 } from "./LpShift-BAp8lGoa.js";
13
13
  const _hoisted_1 = ["aria-label", "title"];
14
14
  const _hoisted_2 = {
15
15
  key: 1,
@@ -125,6 +125,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
125
125
  if (!pair) return;
126
126
  if (tuner) {
127
127
  tuner.pickTheme(STUDIO_SYSTEM);
128
+ emit("update:modelValue", STUDIO_SYSTEM);
128
129
  emit("change", tuner.theme.value);
129
130
  return;
130
131
  }
@@ -169,7 +170,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
169
170
  const triggerLabel = computed(
170
171
  () => props["aria-label"] ?? text.value.trigger.replace("{name}", labelName.value)
171
172
  );
172
- usePaletteTheme(() => tuner ?? void 0);
173
+ usePaletteTheme(() => tuner ?? void 0, { hide: props.studioHide });
173
174
  return (_ctx, _cache) => {
174
175
  return openBlock(), createBlock(unref(PopoverRoot), {
175
176
  open: studioOpen.value,
@@ -4,7 +4,7 @@ import { Time } from "@internationalized/date";
4
4
  import { TimeFieldRoot, TimeFieldInput } from "reka-ui";
5
5
  import { useFieldControl, focusLeft } from "../composables/useField.js";
6
6
  import { useMergedAttrs } from "../composables/useMergedClass.js";
7
- import { _ as _sfc_main$1 } from "./LpIcon-DkP-9mzK.js";
7
+ import { _ as _sfc_main$1 } from "./LpIcon--5WSb3jJ.js";
8
8
  const __default__ = { inheritAttrs: false };
9
9
  const _sfc_main = /* @__PURE__ */ defineComponent({
10
10
  ...__default__,
@@ -4,8 +4,8 @@ import { prefersReducedMotion } from "../composables/easing.js";
4
4
  import { useLabels } from "../composables/useLpConfig.js";
5
5
  import { useToast } from "../composables/useToast.js";
6
6
  import { CLOSE_ICON } from "../components/dropdown.js";
7
- import { _ as _sfc_main$2 } from "./LpCopyButton-Dmq7DmFw.js";
8
- import { _ as _sfc_main$1 } from "./LpIcon-DkP-9mzK.js";
7
+ import { _ as _sfc_main$2 } from "./LpCopyButton-DaD1KCn6.js";
8
+ import { _ as _sfc_main$1 } from "./LpIcon--5WSb3jJ.js";
9
9
  import { toneLook } from "../components/tone.js";
10
10
  import { usePortalTarget } from "../composables/useView.js";
11
11
  const _hoisted_1 = { class: "flex items-start gap-3 p-3.5" };
@@ -1,20 +1,21 @@
1
- import { defineComponent, h, markRaw, computed, watch, openBlock, createBlock, unref, withCtx, createVNode, createCommentVNode, normalizeClass, createElementVNode, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString, renderSlot } from "vue";
1
+ import { defineComponent, h, markRaw, computed, watch, ref, openBlock, createBlock, unref, withCtx, createVNode, createCommentVNode, normalizeClass, createElementVNode, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString, renderSlot } from "vue";
2
2
  import { Background } from "@vue-flow/background";
3
3
  import { Controls } from "@vue-flow/controls";
4
4
  import { MarkerType, useVueFlow, VueFlow, SelectionMode, Panel } from "@vue-flow/core";
5
5
  import { MiniMap } from "@vue-flow/minimap";
6
- import { _ as _sfc_main$3 } from "./LpInfraNode-yTh4-5qa.js";
6
+ import { _ as _sfc_main$3 } from "./LpInfraNode-BT0VQrOa.js";
7
7
  import { _ as _sfc_main$1 } from "./LpLaneNode-HtnQf2FF.js";
8
8
  import { _ as _sfc_main$2 } from "./LpServiceNode-D8uJ8sGk.js";
9
9
  import { _ as _sfc_main$4 } from "./LpWaypointEdge-D8yHlQiw.js";
10
- const _hoisted_1 = { class: "flex flex-col gap-1.5 rounded-card border border-line bg-surface-overlay/90 px-3 py-2 text-[11px] backdrop-blur" };
11
- const _hoisted_2 = {
10
+ const _hoisted_1 = {
12
11
  width: "22",
13
12
  height: "6",
14
13
  class: "shrink-0",
15
14
  "aria-hidden": "true"
16
15
  };
17
- const _hoisted_3 = ["stroke", "stroke-width", "stroke-dasharray"];
16
+ const _hoisted_2 = ["stroke", "stroke-width", "stroke-dasharray"];
17
+ const MINIMAP_HEIGHT = 165;
18
+ const FRAME = 24;
18
19
  const _sfc_main = /* @__PURE__ */ defineComponent({
19
20
  __name: "LpTopologyCanvas",
20
21
  props: {
@@ -141,7 +142,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
141
142
  onMoveEnd,
142
143
  getSelectedNodes,
143
144
  fitView,
144
- setViewport
145
+ setViewport,
146
+ onNodesInitialized
145
147
  } = useVueFlow();
146
148
  onNodeClick(({ node }) => emit("node-select", node.id));
147
149
  onNodeDoubleClick(({ node }) => emit("node-activate", node.id));
@@ -188,10 +190,32 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
188
190
  });
189
191
  onPaneClick(() => emit("pane-click"));
190
192
  onConnect((conn) => emit("connect", conn));
193
+ const legendBox = ref(null);
194
+ function framePadding() {
195
+ const wide = typeof window === "undefined" || window.matchMedia("(min-width: 640px)").matches;
196
+ const legendHeight = wide && props.legend ? (legendBox.value?.offsetHeight ?? 0) + 15 : 0;
197
+ const legendTop = props.legendPosition.startsWith("top");
198
+ const bottom = Math.max(legendTop ? 0 : legendHeight, wide && props.minimap ? MINIMAP_HEIGHT : 0);
199
+ return {
200
+ top: `${FRAME + (legendTop ? legendHeight : 0)}px`,
201
+ bottom: `${FRAME + bottom}px`,
202
+ left: `${FRAME}px`,
203
+ right: `${FRAME}px`
204
+ };
205
+ }
206
+ function fitFramed(params = {}) {
207
+ return fitView({ padding: framePadding(), ...params });
208
+ }
209
+ let fitted = false;
210
+ onNodesInitialized(() => {
211
+ if (fitted) return;
212
+ fitted = true;
213
+ void fitFramed();
214
+ });
191
215
  async function applyViewport(v) {
192
216
  await setViewport({ x: v.x, y: v.y, zoom: v.zoom });
193
217
  }
194
- __expose({ fitView, setViewport: applyViewport });
218
+ __expose({ fitView: fitFramed, setViewport: applyViewport });
195
219
  return (_ctx, _cache) => {
196
220
  return openBlock(), createBlock(unref(VueFlow), {
197
221
  nodes: flowNodes.value,
@@ -207,7 +231,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
207
231
  "default-viewport": { zoom: 0.9 },
208
232
  "min-zoom": 0.3,
209
233
  "max-zoom": 2,
210
- "fit-view-on-init": "",
211
234
  class: "lp-topology"
212
235
  }, {
213
236
  default: withCtx(() => [
@@ -224,20 +247,27 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
224
247
  "node-color": "var(--color-surface-soft)",
225
248
  "mask-color": "rgba(0,0,0,0.55)"
226
249
  })) : createCommentVNode("", true),
227
- __props.controls ? (openBlock(), createBlock(unref(Controls), { key: 1 })) : createCommentVNode("", true),
250
+ __props.controls ? (openBlock(), createBlock(unref(Controls), {
251
+ key: 1,
252
+ "fit-view-params": { padding: framePadding() }
253
+ }, null, 8, ["fit-view-params"])) : createCommentVNode("", true),
228
254
  __props.legend ? (openBlock(), createBlock(unref(Panel), {
229
255
  key: 2,
230
256
  position: __props.legendPosition,
231
257
  class: normalizeClass([legendOffset.value, "max-sm:hidden"])
232
258
  }, {
233
259
  default: withCtx(() => [
234
- createElementVNode("div", _hoisted_1, [
260
+ createElementVNode("div", {
261
+ ref_key: "legendBox",
262
+ ref: legendBox,
263
+ class: "flex flex-col gap-1.5 rounded-card border border-line bg-surface-overlay/90 px-3 py-2 text-[11px] backdrop-blur"
264
+ }, [
235
265
  (openBlock(true), createElementBlock(Fragment, null, renderList(legendItems.value, (l) => {
236
266
  return openBlock(), createElementBlock("div", {
237
267
  key: l.label,
238
268
  class: "flex items-center gap-2 text-muted"
239
269
  }, [
240
- (openBlock(), createElementBlock("svg", _hoisted_2, [
270
+ (openBlock(), createElementBlock("svg", _hoisted_1, [
241
271
  createElementVNode("line", {
242
272
  x1: "0",
243
273
  y1: "3",
@@ -247,13 +277,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
247
277
  "stroke-width": l.width,
248
278
  "stroke-dasharray": l.dash,
249
279
  "stroke-linecap": "round"
250
- }, null, 8, _hoisted_3)
280
+ }, null, 8, _hoisted_2)
251
281
  ])),
252
282
  createTextVNode(" " + toDisplayString(l.label), 1)
253
283
  ]);
254
284
  }), 128)),
255
285
  renderSlot(_ctx.$slots, "legend-extra")
256
- ])
286
+ ], 512)
257
287
  ]),
258
288
  _: 3
259
289
  }, 8, ["position", "class"])) : createCommentVNode("", true)
@@ -8,7 +8,7 @@ import { useMediaQuery } from "../composables/useMediaQuery.js";
8
8
  import { useView, usePortalTarget, viewDocument, viewWindow } from "../composables/useView.js";
9
9
  import { scrollToElement } from "../composables/scroll.js";
10
10
  import { PANEL_SURFACE } from "../components/dropdown.js";
11
- import { _ as _sfc_main$1 } from "./TourCard--2IfgnUU.js";
11
+ import { _ as _sfc_main$1 } from "./TourCard-CBkj1GYi.js";
12
12
  import { holeOf, panelsAround, holeClip } from "../components/tour.js";
13
13
  const _hoisted_1 = ["aria-label"];
14
14
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, ref, onMounted, watch, nextTick, computed, openBlock, createElementBlock, mergeProps, unref, createVNode, withCtx, createElementVNode, normalizeStyle, normalizeClass, Fragment, toDisplayString, createTextVNode, createBlock, createCommentVNode } from "vue";
2
2
  import { useMergedAttrs } from "../composables/useMergedClass.js";
3
3
  import { useResizeObserver } from "../composables/useResizeObserver.js";
4
- import { _ as _sfc_main$2 } from "./LpCopyButton-Dmq7DmFw.js";
4
+ import { _ as _sfc_main$2 } from "./LpCopyButton-DaD1KCn6.js";
5
5
  import { _ as _sfc_main$1 } from "./LpTooltip-BcBvIx4z.js";
6
6
  import { middleTruncate } from "../components/fieldText.js";
7
7
  const _hoisted_1 = ["tabindex"];
@@ -1,9 +1,9 @@
1
1
  import { defineComponent, computed, ref, openBlock, createElementBlock, mergeProps, unref, toDisplayString, createCommentVNode, createElementVNode, createVNode, withCtx, createBlock, Fragment, renderList, normalizeStyle, createTextVNode } from "vue";
2
- import { _ as _sfc_main$6 } from "./LpNumberFlow-5khYxsfX.js";
3
- import { _ as _sfc_main$5 } from "./LpRollingText-DiL717LK.js";
4
- import { _ as _sfc_main$4 } from "./LpShift-DXNsauQZ.js";
2
+ import { _ as _sfc_main$6 } from "./LpNumberFlow-CcxEGUy0.js";
3
+ import { _ as _sfc_main$5 } from "./LpRollingText-B54Pje7P.js";
4
+ import { _ as _sfc_main$4 } from "./LpShift-BAp8lGoa.js";
5
5
  import { _ as _sfc_main$2 } from "./LpSkeleton-BB6XIV-w.js";
6
- import { _ as _sfc_main$1 } from "./LpSwap-DzE6M3Mg.js";
6
+ import { _ as _sfc_main$1 } from "./LpSwap-B5YOXgtx.js";
7
7
  import { _ as _sfc_main$3 } from "./LpTooltip-BcBvIx4z.js";
8
8
  import { TONES } from "../components/tone.js";
9
9
  import { useMergedAttrs } from "../composables/useMergedClass.js";
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, openBlock, createElementBlock, Fragment, createElementVNode, createVNode, createCommentVNode, toDisplayString } from "vue";
2
- import { _ as _sfc_main$1 } from "./LpIcon-DkP-9mzK.js";
2
+ import { _ as _sfc_main$1 } from "./LpIcon--5WSb3jJ.js";
3
3
  const _hoisted_1 = {
4
4
  class: "flex max-w-72 min-w-0 items-center gap-2 px-2.5 pt-1.5 pb-2",
5
5
  "aria-hidden": "true"
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, openBlock, createElementBlock, createBlock, createCommentVNode, createElementVNode, toDisplayString } from "vue";
2
- import { _ as _sfc_main$1 } from "./LpIcon-DkP-9mzK.js";
2
+ import { _ as _sfc_main$1 } from "./LpIcon--5WSb3jJ.js";
3
3
  const _hoisted_1 = { class: "flex min-w-0 items-center gap-2.5" };
4
4
  const _hoisted_2 = ["src"];
5
5
  const _hoisted_3 = { class: "flex min-w-0 flex-col" };
@@ -2,9 +2,9 @@ import { defineComponent, useModel, useAttrs, openBlock, createElementBlock, nor
2
2
  import { useFieldBlur } from "../composables/useField.js";
3
3
  import { mergeClass } from "../composables/useMergedClass.js";
4
4
  import { PICKER_PRESETS, PICKER_PRESET, PICKER_TRIGGER, PICKER_SIZE, pickerTone, PICKER_CLEAR } from "../components/calendar.js";
5
- import { _ as _sfc_main$2 } from "./LpIcon-DkP-9mzK.js";
5
+ import { _ as _sfc_main$2 } from "./LpIcon--5WSb3jJ.js";
6
6
  import { _ as _sfc_main$1 } from "./LpPopover-DmZ3wUtP.js";
7
- import { _ as _sfc_main$3 } from "./LpRollingText-DiL717LK.js";
7
+ import { _ as _sfc_main$3 } from "./LpRollingText-B54Pje7P.js";
8
8
  const _hoisted_1 = ["data-lp-field-part"];
9
9
  const _hoisted_2 = ["id", "disabled", "aria-invalid", "aria-describedby"];
10
10
  const _hoisted_3 = {
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, useModel, openBlock, createBlock, withCtx, createVNode, mergeProps, createElementVNode, mergeModels } from "vue";
2
- import { _ as _sfc_main$2 } from "./LpButton-BQDAFXBd.js";
3
- import { _ as _sfc_main$3 } from "./LpIcon-DkP-9mzK.js";
2
+ import { _ as _sfc_main$2 } from "./LpButton-Dk7eT4ro.js";
3
+ import { _ as _sfc_main$3 } from "./LpIcon--5WSb3jJ.js";
4
4
  import { _ as _sfc_main$1 } from "./LpTooltip-BcBvIx4z.js";
5
5
  const _hoisted_1 = { class: "grid place-items-center" };
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({