@leavepulse/ui 0.77.2 → 0.78.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 (597) hide show
  1. package/README.md +68 -0
  2. package/dist/assets/{LpCommandPalette-DOIZHw-g.css → LpCommandPalette-DDJKICKh.css} +19 -19
  3. package/dist/assets/{LpDock-Cbh0wQUv.css → LpDock-Dw82tWVD.css} +3 -3
  4. package/dist/assets/{LpDropzone-B_qRq1-R.css → LpDropzone-DNbh_NFJ.css} +10 -10
  5. package/dist/assets/{LpImageEditor-XM5bAziW.css → LpImageEditor-Bgu20XLs.css} +6 -6
  6. package/dist/assets/{LpTable-Bv-EcQs7.css → LpTable-CCk0ZHo7.css} +19 -19
  7. package/dist/assets/LpTabs-Bh7a-Bdl.css +18 -0
  8. package/dist/chunks/AppShellContextNav-C6Ho2mof.js +49 -0
  9. package/dist/chunks/ChartRangeSelector-HO0sMMz6.js +129 -0
  10. package/dist/chunks/{ContextMenuItems-BXumicbh.js → ContextMenuItems-DmaKSJVv.js} +1 -1
  11. package/dist/chunks/{DropzoneLinkField-C-9BCGJn.js → DropzoneLinkField-DXIr0eFz.js} +2 -2
  12. package/dist/chunks/{FieldWrapper-CORPzo9s.js → FieldWrapper-DnuMTrqW.js} +1 -1
  13. package/dist/chunks/IconCloseButton-COZEsa9u.js +29 -0
  14. package/dist/chunks/{LayoutCanvas-CNOAUk7D.js → LayoutCanvas-CZKOltfA.js} +1 -1
  15. package/dist/chunks/{LayoutNode-DF5BMN0J.js → LayoutNode-D2f7v683.js} +45 -45
  16. package/dist/chunks/{LpActionBar-BP1ld7-S.js → LpActionBar-BGMk5KoG.js} +3 -3
  17. package/dist/chunks/{LpActivityLine-CJvzrNpj.js → LpActivityLine-Ea-t5Vza.js} +4 -2
  18. package/dist/chunks/{LpAddressInput-sYMvYzcY.js → LpAddressInput-ZqoZ-N2Y.js} +12 -11
  19. package/dist/chunks/{LpAlert-n5XPAZfv.js → LpAlert-CjvTZIKF.js} +3 -3
  20. package/dist/chunks/LpAppShell-BNAVTQsY.js +582 -0
  21. package/dist/chunks/{LpAutocomplete-DOu7FN5P.js → LpAutocomplete-DkY6CSyD.js} +26 -42
  22. package/dist/chunks/{LpAvatar-Cg6Az3wz.js → LpAvatar-cQVsNk6F.js} +2 -2
  23. package/dist/chunks/{LpBadge-wUYLN4U9.js → LpBadge-D5QQdDQ_.js} +2 -2
  24. package/dist/chunks/{LpBottomNav-CbNQQPuL.js → LpBottomNav-zxLGGbjm.js} +9 -2
  25. package/dist/chunks/{LpBreadcrumbs-DPdbth-c.js → LpBreadcrumbs-CIIBsygI.js} +4 -3
  26. package/dist/chunks/{LpButton-CFb44IjC.js → LpButton-DSHioIfD.js} +5 -4
  27. package/dist/chunks/{LpCalendar-CuoWks-0.js → LpCalendar-D4-LVjfF.js} +1 -1
  28. package/dist/chunks/{LpCard-r13WRqox.js → LpCard-BPtYXwnT.js} +1 -1
  29. package/dist/chunks/{LpCheckbox-Cs4SHaHX.js → LpCheckbox-D6RuDW4X.js} +38 -16
  30. package/dist/chunks/{LpCodeBlock-DRC8VbXW.js → LpCodeBlock-DuzmnIHl.js} +19 -41
  31. package/dist/chunks/{LpCodeDisplay-CE9TxCA4.js → LpCodeDisplay-CO8fngxa.js} +5 -5
  32. package/dist/chunks/{LpCollapse-CWS9M_lm.js → LpCollapse-DrAw5DBZ.js} +5 -4
  33. package/dist/chunks/{LpColorPicker-1y1QJHZR.js → LpColorPicker-BxAHEnR5.js} +11 -12
  34. package/dist/chunks/{LpCommandScope-CtUhJe8T.js → LpCommandScope-DRUvHiX7.js} +1 -1
  35. package/dist/chunks/{LpConfirmDialog-DlD45Bi_.js → LpConfirmDialog-6oCIJTDa.js} +3 -3
  36. package/dist/chunks/{LpConfirmHost-BIWjBLmI.js → LpConfirmHost-DgHvfT6s.js} +1 -1
  37. package/dist/chunks/{LpContextMenu-rx2tCjwk.js → LpContextMenu--eMGIql6.js} +13 -15
  38. package/dist/chunks/{LpContextSwitcher-Dwh6dyID.js → LpContextSwitcher-1C1tExdl.js} +2 -2
  39. package/dist/chunks/{LpCopyButton-xF7wFVoU.js → LpCopyButton-7EOSIuwa.js} +3 -3
  40. package/dist/chunks/{LpCountdown-DgeY3cLG.js → LpCountdown-DVl7vXI1.js} +4 -3
  41. package/dist/chunks/{LpDataList-Jxyl9H5w.js → LpDataList-DgBeM01y.js} +13 -4
  42. package/dist/chunks/{LpDatePicker-CA0QTfBC.js → LpDatePicker-DwSDY0mt.js} +12 -18
  43. package/dist/chunks/{LpDateRangePicker-u3J51xXk.js → LpDateRangePicker-CNQXdTVv.js} +10 -16
  44. package/dist/chunks/{LpDisclosure-Cpa7Hc5T.js → LpDisclosure-DG7JCo-d.js} +2 -2
  45. package/dist/chunks/{LpDrawer-CrG8t_KP.js → LpDrawer-Bt9UUqt_.js} +61 -61
  46. package/dist/chunks/{LpDropdownMenu-Dl7Z4ZhS.js → LpDropdownMenu-CLzxIOgM.js} +9 -17
  47. package/dist/chunks/{LpEditable-Cy6GLbFx.js → LpEditable-DVT0Rh8F.js} +9 -6
  48. package/dist/chunks/{LpEmptyState-EQHiRYhG.js → LpEmptyState-DurPF001.js} +1 -1
  49. package/dist/chunks/{LpFieldNotice-CzQ2_5rQ.js → LpFieldNotice-DJ10cYIo.js} +1 -1
  50. package/dist/chunks/LpFileTree-BSx1kBoV.js +735 -0
  51. package/dist/chunks/{LpFileTreeNode-cT6BIWvz.js → LpFileTreeNode-4dVmFHb3.js} +116 -34
  52. package/dist/chunks/{LpFormField-Ch69Jd-X.js → LpFormField-BKYn9dyP.js} +3 -3
  53. package/dist/chunks/{LpFrame-BVQCQLDI.js → LpFrame-Bv5Fphte.js} +25 -11
  54. package/dist/chunks/{LpHintExample-9Py0wc-L.js → LpHintExample-YzCXiSUp.js} +1 -1
  55. package/dist/chunks/{LpHintLayer-CgObdUsM.js → LpHintLayer-BeKRsRon.js} +2 -2
  56. package/dist/chunks/{LpHints-Bz-BlaSl.js → LpHints-qf3xYsza.js} +3 -3
  57. package/dist/chunks/{LpHoverCard-spGxyw7T.js → LpHoverCard-DanH3Nz1.js} +23 -5
  58. package/dist/chunks/{LpIcon--5WSb3jJ.js → LpIcon-C6JpQ5td.js} +6 -3
  59. package/dist/chunks/{LpIdenticon-BzdC_qz9.js → LpIdenticon-Dbbr4fvt.js} +2 -1
  60. package/dist/chunks/{LpInfraNode-46XOCkfq.js → LpInfraNode-BAU40Km2.js} +2 -2
  61. package/dist/chunks/{LpInput-Tw-yxT4I.js → LpInput-DL6HEJdi.js} +16 -28
  62. package/dist/chunks/LpInspector-CuoMAhiw.js +209 -0
  63. package/dist/chunks/{LpLightbox-B95yu22B.js → LpLightbox-xvpQ64MM.js} +57 -32
  64. package/dist/chunks/{LpLoader-DVwkOmt9.js → LpLoader-Bf1yZwaU.js} +1 -1
  65. package/dist/chunks/LpLogInspector-6cNnXqp4.js +119 -0
  66. package/dist/chunks/{LpLogViewer-ngqkns4m.js → LpLogViewer-Dvb1E9_G.js} +234 -53
  67. package/dist/chunks/{LpMapPicker-DRGgh89B.js → LpMapPicker-D5_YLLBC.js} +4 -3
  68. package/dist/chunks/{LpMasonry--k0571qG.js → LpMasonry-DPYekFxs.js} +8 -5
  69. package/dist/chunks/{LpMediaGallery-Bkram-MO.js → LpMediaGallery-Df-tiWeq.js} +3 -3
  70. package/dist/chunks/{LpModal-CoGhLTyH.js → LpModal-DrtQ_1A2.js} +11 -13
  71. package/dist/chunks/{LpModalNav-BGvs2y5Q.js → LpModalNav-DkmGCnZE.js} +11 -37
  72. package/dist/chunks/{LpNotificationBell-B0034Lk-.js → LpNotificationBell-D_wklO1m.js} +9 -9
  73. package/dist/chunks/{LpNumberField-e0IBkWU1.js → LpNumberField-CNHsmSDZ.js} +7 -16
  74. package/dist/chunks/{LpOtpInput-CeBPsM7D.js → LpOtpInput-BRpLBbOD.js} +2 -2
  75. package/dist/chunks/{LpPagination-BIIiYHXR.js → LpPagination-snQ020xQ.js} +6 -4
  76. package/dist/chunks/{LpPaletteTheme-DiLYKQiZ.js → LpPaletteTheme-dVtxHx-F.js} +4 -4
  77. package/dist/chunks/{LpPasswordInput-BkHKQDhM.js → LpPasswordInput-B-zD6tUS.js} +2 -2
  78. package/dist/chunks/{LpPhoneInput-CETEp5W7.js → LpPhoneInput-BSL7NX4z.js} +15 -26
  79. package/dist/chunks/{LpPie-DrZepi0p.js → LpPie-9t_guO49.js} +22 -21
  80. package/dist/chunks/{LpPipeline-B3aOVOkV.js → LpPipeline-rjXvEDRJ.js} +16 -7
  81. package/dist/chunks/{LpPopover-DmZ3wUtP.js → LpPopover-BQSuxtai.js} +10 -1
  82. package/dist/chunks/{LpProgress-Yr6ONG5t.js → LpProgress-D_MSjowb.js} +2 -1
  83. package/dist/chunks/{LpQuota-Dk2MyI2Z.js → LpQuota-CgWPgdVt.js} +1 -1
  84. package/dist/chunks/{LpRadioGroup-ggaPL92T.js → LpRadioGroup-BrazjLY_.js} +4 -4
  85. package/dist/chunks/{LpRangeCalendar-CYYUYqJ7.js → LpRangeCalendar-BrqlGZzE.js} +1 -1
  86. package/dist/chunks/{LpRangeSlider-CM-0ZITZ.js → LpRangeSlider-fz61tzc-.js} +5 -9
  87. package/dist/chunks/{LpRelativeTime-DwgCb5-8.js → LpRelativeTime-BovUk8MP.js} +1 -1
  88. package/dist/chunks/{LpRepeater-D7ZmnIYd.js → LpRepeater-BkJHSPI1.js} +3 -3
  89. package/dist/chunks/{LpRevealOnScroll-DcQjexLy.js → LpRevealOnScroll-CPwyiQAr.js} +1 -1
  90. package/dist/chunks/{LpScramble-Bn9OoOtC.js → LpScramble-DsE77iVp.js} +1 -1
  91. package/dist/chunks/{LpScrollArea-MyEnVB_5.js → LpScrollArea-ay4Xo_hg.js} +22 -10
  92. package/dist/chunks/{LpSecretField-BbmqM9ye.js → LpSecretField-DBvU6iAw.js} +10 -9
  93. package/dist/chunks/{LpSection-DFK_uoJE.js → LpSection-BfteipxU.js} +1 -1
  94. package/dist/chunks/{LpSegmented-CeACsMMA.js → LpSegmented-DbEJhbv-.js} +8 -10
  95. package/dist/chunks/{LpSelect-Cxq4yBGd.js → LpSelect-Y-iuSymW.js} +47 -30
  96. package/dist/chunks/{LpShaderBackdrop-Bote0iuy.js → LpShaderBackdrop-wQygYb5h.js} +13 -10
  97. package/dist/chunks/{LpShift-CCq7dofl.js → LpShift-DAgS_d2x.js} +18 -15
  98. package/dist/chunks/{LpSidebar-DzE1783C.js → LpSidebar-kSkpPh3-.js} +74 -87
  99. package/dist/chunks/{LpSidebarNav-DE3PhXVP.js → LpSidebarNav-C2mvqrY2.js} +8 -6
  100. package/dist/chunks/{LpSidebarRow-BRYhNDSo.js → LpSidebarRow-eRP4Q31q.js} +6 -5
  101. package/dist/chunks/{LpSlider-DxYoCJJO.js → LpSlider-A4ixovgS.js} +5 -9
  102. package/dist/chunks/{LpSpotlight-4F3NeUMY.js → LpSpotlight-DwxkhFgR.js} +2 -1
  103. package/dist/chunks/{LpStat-f2LfDCJ4.js → LpStat-pMNZgFcq.js} +2 -2
  104. package/dist/chunks/{LpStatus-DglxttQ7.js → LpStatus-DGJFwk5F.js} +2 -2
  105. package/dist/chunks/{LpStepMark-DpzKVyh8.js → LpStepMark-Dw2MRTrt.js} +2 -2
  106. package/dist/chunks/{LpStepper-DpsocBNJ.js → LpStepper-DNnh7lCu.js} +1 -1
  107. package/dist/chunks/{LpSwap-C96c0LWh.js → LpSwap-M7nFeW3C.js} +1 -1
  108. package/dist/chunks/{LpSwitch-BnXd1llc.js → LpSwitch-DnC2-0aV.js} +3 -3
  109. package/dist/chunks/{LpTabFace-DPCwKkH2.js → LpTabFace-DQoV8mQG.js} +2 -2
  110. package/dist/chunks/{LpTableFilter-CiVBpaq0.js → LpTableFilter-DgARTsA1.js} +4 -4
  111. package/dist/chunks/{LpTableOfContents-BN5zvpnx.js → LpTableOfContents-CKkWEK6R.js} +14 -9
  112. package/dist/chunks/{LpTagsInput-C-mDG648.js → LpTagsInput-Dt0mteSj.js} +19 -27
  113. package/dist/chunks/{LpTextarea-TE-yZv2U.js → LpTextarea-Co0b9PVx.js} +8 -16
  114. package/dist/chunks/LpThemeProvider-XK6ZeWAE.js +81 -0
  115. package/dist/chunks/{LpThemeStudio-BpORDvH6.js → LpThemeStudio-DzYfE-5k.js} +12 -195
  116. package/dist/chunks/{LpThemeSwitcher-BnEn_mvf.js → LpThemeSwitcher-CFLkdbBL.js} +8 -6
  117. package/dist/chunks/{LpTimeField-BawSVsmt.js → LpTimeField-DeOcKWJq.js} +6 -9
  118. package/dist/chunks/{LpToaster-IwTXjbbU.js → LpToaster-QFj0P-5m.js} +10 -8
  119. package/dist/chunks/{LpTooltip-BcBvIx4z.js → LpTooltip-BJf3lZMq.js} +51 -19
  120. package/dist/chunks/LpTopologyCanvas-BOHHHZ_6.js +673 -0
  121. package/dist/chunks/{LpTour-BZq-mUMv.js → LpTour-ClKYhx4h.js} +7 -5
  122. package/dist/chunks/{LpTruncate-CflAIwiJ.js → LpTruncate-C6u3gjc6.js} +6 -5
  123. package/dist/chunks/{LpTypewriter-BCL_a6wE.js → LpTypewriter-CZIzpdbe.js} +2 -1
  124. package/dist/chunks/{LpUptimeBar-DqNvvMBK.js → LpUptimeBar-BnYmR2rj.js} +3 -3
  125. package/dist/chunks/{LpVideoBackdrop-DS1wGv-X.js → LpVideoBackdrop-Ct4St4ZL.js} +10 -13
  126. package/dist/chunks/LpWindow-B8YSRVTH.js +297 -0
  127. package/dist/chunks/LpWorkspaceSwitcher-D0e9upAy.js +139 -0
  128. package/dist/chunks/{MenuTitle-BmCNNTKH.js → MenuTitle-Bh5dAdV1.js} +1 -1
  129. package/dist/chunks/{OptionContent-22UT8zLn.js → OptionContent-CGb8QlHA.js} +1 -1
  130. package/dist/chunks/{PickerField-Bfh8id3d.js → PickerField-BM1dyafh.js} +4 -4
  131. package/dist/chunks/{RevealToggle-BEit1n6Z.js → RevealToggle-CCPDE8Mv.js} +3 -3
  132. package/dist/chunks/SliderRail-DhPREa_R.js +18 -0
  133. package/dist/chunks/{TourCard-DNclH3u_.js → TourCard-DAzTYfav.js} +4 -4
  134. package/dist/chunks/{icons-DMITlfw5.js → icons-CYfcpSDS.js} +26 -10
  135. package/dist/component-names.d.ts +1 -1
  136. package/dist/components/AppShellContextNav.vue.d.ts +13 -0
  137. package/dist/components/AppShellContextNav.vue.js +4 -0
  138. package/dist/components/ChartRangeSelector.vue.d.ts +21 -0
  139. package/dist/components/ChartRangeSelector.vue.js +4 -0
  140. package/dist/components/ContextMenuItems.vue.js +1 -1
  141. package/dist/components/DropzoneLinkField.vue.d.ts +2 -2
  142. package/dist/components/DropzoneLinkField.vue.js +1 -1
  143. package/dist/components/FieldWrapper.vue.js +1 -1
  144. package/dist/components/IconCloseButton.vue.d.ts +7 -0
  145. package/dist/components/IconCloseButton.vue.js +4 -0
  146. package/dist/components/LayoutCanvas.vue.js +1 -1
  147. package/dist/components/LayoutNode.vue.js +1 -1
  148. package/dist/components/LpActionBar.vue.js +1 -1
  149. package/dist/components/LpActivityLine.vue.js +1 -1
  150. package/dist/components/LpAddressInput.vue.js +1 -1
  151. package/dist/components/LpAlert.vue.js +1 -1
  152. package/dist/components/LpAppShell.vue.d.ts +110 -2
  153. package/dist/components/LpAppShell.vue.js +1 -1
  154. package/dist/components/LpAutocomplete.vue.js +1 -1
  155. package/dist/components/LpAvatar.vue.js +1 -1
  156. package/dist/components/LpBadge.vue.js +1 -1
  157. package/dist/components/LpBottomNav.vue.d.ts +5 -0
  158. package/dist/components/LpBottomNav.vue.js +1 -1
  159. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  160. package/dist/components/LpButton.vue.d.ts +14 -2
  161. package/dist/components/LpButton.vue.js +1 -1
  162. package/dist/components/LpCalendar.vue.js +1 -1
  163. package/dist/components/LpCard.vue.js +1 -1
  164. package/dist/components/LpChart.vue.d.ts +74 -2
  165. package/dist/components/LpChart.vue.js +326 -85
  166. package/dist/components/LpCheckbox.vue.d.ts +6 -2
  167. package/dist/components/LpCheckbox.vue.js +1 -1
  168. package/dist/components/LpCodeBlock.vue.js +1 -1
  169. package/dist/components/LpCodeDisplay.vue.js +1 -1
  170. package/dist/components/LpCollapse.vue.js +1 -1
  171. package/dist/components/LpColorPicker.vue.js +1 -1
  172. package/dist/components/LpCommandPalette.vue.d.ts +8 -0
  173. package/dist/components/LpCommandPalette.vue.js +107 -56
  174. package/dist/components/LpCommandScope.vue.js +1 -1
  175. package/dist/components/LpConfirmDialog.vue.js +1 -1
  176. package/dist/components/LpConfirmHost.vue.js +1 -1
  177. package/dist/components/LpContextMenu.vue.js +1 -1
  178. package/dist/components/LpContextSwitcher.vue.js +1 -1
  179. package/dist/components/LpCopyButton.vue.js +1 -1
  180. package/dist/components/LpCountdown.vue.js +1 -1
  181. package/dist/components/LpDataList.vue.d.ts +1 -1
  182. package/dist/components/LpDataList.vue.js +1 -1
  183. package/dist/components/LpDatePicker.vue.d.ts +3 -15
  184. package/dist/components/LpDatePicker.vue.js +1 -1
  185. package/dist/components/LpDateRangePicker.vue.d.ts +3 -13
  186. package/dist/components/LpDateRangePicker.vue.js +1 -1
  187. package/dist/components/LpDisclosure.vue.js +1 -1
  188. package/dist/components/LpDock.vue.js +21 -18
  189. package/dist/components/LpDrawer.vue.d.ts +1 -1
  190. package/dist/components/LpDrawer.vue.js +1 -1
  191. package/dist/components/LpDropdownMenu.vue.js +1 -1
  192. package/dist/components/LpDropzone.vue.js +14 -11
  193. package/dist/components/LpEditable.vue.js +1 -1
  194. package/dist/components/LpEmptyState.vue.js +1 -1
  195. package/dist/components/LpFieldNotice.vue.js +1 -1
  196. package/dist/components/LpFileTree.vue.d.ts +96 -6
  197. package/dist/components/LpFileTree.vue.js +1 -1
  198. package/dist/components/LpFileTreeNode.vue.d.ts +48 -0
  199. package/dist/components/LpFileTreeNode.vue.js +1 -1
  200. package/dist/components/LpFormField.vue.js +1 -1
  201. package/dist/components/LpFrame.vue.js +1 -1
  202. package/dist/components/LpGauge.vue.d.ts +1 -1
  203. package/dist/components/LpHintExample.vue.js +1 -1
  204. package/dist/components/LpHintLayer.vue.js +1 -1
  205. package/dist/components/LpHints.vue.js +1 -1
  206. package/dist/components/LpHoverCard.vue.js +1 -1
  207. package/dist/components/LpIcon.vue.d.ts +2 -0
  208. package/dist/components/LpIcon.vue.js +1 -1
  209. package/dist/components/LpIdenticon.vue.js +1 -1
  210. package/dist/components/LpImageEditor.vue.js +7 -6
  211. package/dist/components/LpInfraNode.vue.js +1 -1
  212. package/dist/components/LpInput.vue.d.ts +1 -1
  213. package/dist/components/LpInput.vue.js +1 -1
  214. package/dist/components/LpInspector.vue.d.ts +87 -0
  215. package/dist/components/LpInspector.vue.js +4 -0
  216. package/dist/components/LpLightbox.vue.d.ts +8 -0
  217. package/dist/components/LpLightbox.vue.js +1 -1
  218. package/dist/components/LpLoader.vue.d.ts +1 -1
  219. package/dist/components/LpLoader.vue.js +1 -1
  220. package/dist/components/LpLogInspector.vue.d.ts +18 -0
  221. package/dist/components/LpLogInspector.vue.js +4 -0
  222. package/dist/components/LpLogViewer.vue.d.ts +93 -0
  223. package/dist/components/LpLogViewer.vue.js +1 -1
  224. package/dist/components/LpMapPicker.vue.js +1 -1
  225. package/dist/components/LpMasonry.vue.js +1 -1
  226. package/dist/components/LpMediaGallery.vue.js +1 -1
  227. package/dist/components/LpModal.vue.d.ts +4 -2
  228. package/dist/components/LpModal.vue.js +1 -1
  229. package/dist/components/LpModalNav.vue.d.ts +5 -5
  230. package/dist/components/LpModalNav.vue.js +1 -1
  231. package/dist/components/LpNotificationBell.vue.d.ts +2 -2
  232. package/dist/components/LpNotificationBell.vue.js +1 -1
  233. package/dist/components/LpNumberField.vue.js +1 -1
  234. package/dist/components/LpOtpInput.vue.js +1 -1
  235. package/dist/components/LpPagination.vue.js +1 -1
  236. package/dist/components/LpPaletteFacts.vue.js +1 -1
  237. package/dist/components/LpPaletteHeader.vue.js +2 -2
  238. package/dist/components/LpPaletteTheme.vue.js +1 -1
  239. package/dist/components/LpPasswordInput.vue.js +1 -1
  240. package/dist/components/LpPhoneInput.vue.js +1 -1
  241. package/dist/components/LpPie.vue.d.ts +2 -2
  242. package/dist/components/LpPie.vue.js +1 -1
  243. package/dist/components/LpPipeline.vue.d.ts +4 -0
  244. package/dist/components/LpPipeline.vue.js +1 -1
  245. package/dist/components/LpPopover.vue.d.ts +7 -3
  246. package/dist/components/LpPopover.vue.js +1 -1
  247. package/dist/components/LpProgress.vue.d.ts +1 -1
  248. package/dist/components/LpProgress.vue.js +1 -1
  249. package/dist/components/LpQuota.vue.js +1 -1
  250. package/dist/components/LpRadioGroup.vue.js +1 -1
  251. package/dist/components/LpRangeCalendar.vue.js +1 -1
  252. package/dist/components/LpRangeSlider.vue.js +1 -1
  253. package/dist/components/LpRelativeTime.vue.js +1 -1
  254. package/dist/components/LpRepeater.vue.js +1 -1
  255. package/dist/components/LpRevealOnScroll.vue.js +1 -1
  256. package/dist/components/LpScramble.vue.js +1 -1
  257. package/dist/components/LpScrollArea.vue.js +1 -1
  258. package/dist/components/LpSecretField.vue.js +1 -1
  259. package/dist/components/LpSection.vue.js +1 -1
  260. package/dist/components/LpSegmented.vue.js +1 -1
  261. package/dist/components/LpSelect.vue.js +1 -1
  262. package/dist/components/LpShaderBackdrop.vue.js +1 -1
  263. package/dist/components/LpShift.vue.js +1 -1
  264. package/dist/components/LpShortcutsDialog.vue.js +1 -1
  265. package/dist/components/LpSidebar.vue.d.ts +1 -1
  266. package/dist/components/LpSidebar.vue.js +1 -1
  267. package/dist/components/LpSidebarNav.vue.js +1 -1
  268. package/dist/components/LpSidebarRow.vue.js +1 -1
  269. package/dist/components/LpSlider.vue.js +1 -1
  270. package/dist/components/LpSparkline.vue.d.ts +1 -1
  271. package/dist/components/LpSpotlight.vue.js +1 -1
  272. package/dist/components/LpStat.vue.js +1 -1
  273. package/dist/components/LpStatus.vue.js +1 -1
  274. package/dist/components/LpStepMark.vue.js +1 -1
  275. package/dist/components/LpStepper.vue.js +1 -1
  276. package/dist/components/LpSwap.vue.js +1 -1
  277. package/dist/components/LpSwitch.vue.js +1 -1
  278. package/dist/components/LpTabFace.vue.js +1 -1
  279. package/dist/components/LpTable.vue.d.ts +132 -0
  280. package/dist/components/LpTable.vue.js +547 -135
  281. package/dist/components/LpTableFilter.vue.js +1 -1
  282. package/dist/components/LpTableOfContents.vue.js +1 -1
  283. package/dist/components/LpTabs.vue.js +6 -5
  284. package/dist/components/LpTagsInput.vue.js +1 -1
  285. package/dist/components/LpTextarea.vue.js +1 -1
  286. package/dist/components/LpThemeProvider.vue.d.ts +2 -0
  287. package/dist/components/LpThemeProvider.vue.js +1 -1
  288. package/dist/components/LpThemeStudio.vue.js +1 -1
  289. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  290. package/dist/components/LpTimeField.vue.js +1 -1
  291. package/dist/components/LpToaster.vue.js +1 -1
  292. package/dist/components/LpTooltip.vue.js +1 -1
  293. package/dist/components/LpTopologyCanvas.vue.d.ts +131 -5
  294. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  295. package/dist/components/LpTour.vue.js +1 -1
  296. package/dist/components/LpTruncate.vue.js +1 -1
  297. package/dist/components/LpTypewriter.vue.js +1 -1
  298. package/dist/components/LpUptimeBar.vue.js +1 -1
  299. package/dist/components/LpVideoBackdrop.vue.js +1 -1
  300. package/dist/components/LpWindow.vue.d.ts +99 -0
  301. package/dist/components/LpWindow.vue.js +4 -0
  302. package/dist/components/LpWorkspaceSwitcher.vue.d.ts +18 -0
  303. package/dist/components/LpWorkspaceSwitcher.vue.js +4 -0
  304. package/dist/components/MenuTitle.vue.js +1 -1
  305. package/dist/components/OptionContent.vue.js +1 -1
  306. package/dist/components/PickerField.vue.d.ts +2 -2
  307. package/dist/components/PickerField.vue.js +1 -1
  308. package/dist/components/RevealToggle.vue.js +1 -1
  309. package/dist/components/SliderRail.vue.d.ts +3 -0
  310. package/dist/components/SliderRail.vue.js +4 -0
  311. package/dist/components/TourCard.vue.js +1 -1
  312. package/dist/components/address.js +2 -1
  313. package/dist/components/appShell.d.ts +36 -0
  314. package/dist/components/appShell.js +30 -0
  315. package/dist/components/calendar.d.ts +12 -3
  316. package/dist/components/calendar.js +2 -5
  317. package/dist/components/chart.d.ts +21 -0
  318. package/dist/components/chart.js +4 -3
  319. package/dist/components/chartWindow.d.ts +57 -0
  320. package/dist/components/chartWindow.js +136 -0
  321. package/dist/components/color.js +1 -1
  322. package/dist/components/commandPalette.d.ts +16 -2
  323. package/dist/components/commandPalette.js +39 -4
  324. package/dist/components/controlSize.d.ts +5 -0
  325. package/dist/components/controlSize.js +8 -0
  326. package/dist/components/dropdown.d.ts +5 -0
  327. package/dist/components/dropdown.js +2 -0
  328. package/dist/components/exportData.d.ts +6 -1
  329. package/dist/components/exportData.js +25 -18
  330. package/dist/components/fileTree.d.ts +67 -0
  331. package/dist/components/fileTree.js +141 -1
  332. package/dist/components/identicon.js +3 -2
  333. package/dist/components/logTools.d.ts +93 -0
  334. package/dist/components/logTools.js +210 -0
  335. package/dist/components/menuWhen.js +1 -1
  336. package/dist/components/meter.js +2 -1
  337. package/dist/components/pipeline.d.ts +2 -0
  338. package/dist/components/pipeline.js +5 -0
  339. package/dist/components/relativeTime.js +2 -1
  340. package/dist/components/reveal.js +2 -1
  341. package/dist/components/select.d.ts +5 -0
  342. package/dist/components/select.js +10 -0
  343. package/dist/components/sidebar.d.ts +1 -0
  344. package/dist/components/tableFeatures.d.ts +58 -0
  345. package/dist/components/tableFeatures.js +87 -0
  346. package/dist/components/topologyGraph.d.ts +164 -0
  347. package/dist/components/topologyGraph.js +416 -0
  348. package/dist/components/tour.js +5 -3
  349. package/dist/components/videoBackdrop.js +7 -6
  350. package/dist/composables/clamp.d.ts +2 -0
  351. package/dist/composables/clamp.js +4 -0
  352. package/dist/composables/devWarn.d.ts +3 -0
  353. package/dist/composables/devWarn.js +14 -0
  354. package/dist/composables/easing.d.ts +13 -4
  355. package/dist/composables/easing.js +16 -10
  356. package/dist/composables/overlayHistory.js +14 -1
  357. package/dist/composables/pointerDrag.d.ts +15 -0
  358. package/dist/composables/pointerDrag.js +40 -0
  359. package/dist/composables/propCheck.d.ts +10 -0
  360. package/dist/composables/propCheck.js +78 -0
  361. package/dist/composables/realm.d.ts +6 -0
  362. package/dist/composables/realm.js +23 -0
  363. package/dist/composables/scroll.js +4 -2
  364. package/dist/composables/scrollMemory.d.ts +12 -1
  365. package/dist/composables/scrollMemory.js +36 -12
  366. package/dist/composables/spatialNav.js +2 -1
  367. package/dist/composables/textEntry.d.ts +17 -0
  368. package/dist/composables/textEntry.js +19 -0
  369. package/dist/composables/useAsyncTask.d.ts +6 -0
  370. package/dist/composables/useChartSync.d.ts +5 -0
  371. package/dist/composables/useChartSync.js +33 -0
  372. package/dist/composables/useCloseGuard.d.ts +3 -1
  373. package/dist/composables/useCloseGuard.js +6 -3
  374. package/dist/composables/useCommands.d.ts +50 -0
  375. package/dist/composables/useCommands.js +66 -0
  376. package/dist/composables/useField.d.ts +37 -0
  377. package/dist/composables/useField.js +27 -2
  378. package/dist/composables/useFitScale.js +4 -1
  379. package/dist/composables/useFormDraft.d.ts +13 -2
  380. package/dist/composables/useFormDraft.js +17 -9
  381. package/dist/composables/useHintSystem.js +2 -2
  382. package/dist/composables/useHotkeys.js +11 -32
  383. package/dist/composables/useInView.js +2 -1
  384. package/dist/composables/useInputFilter.js +7 -5
  385. package/dist/composables/useInputMask.js +5 -3
  386. package/dist/composables/useLinkedView.d.ts +97 -0
  387. package/dist/composables/useLinkedView.js +139 -0
  388. package/dist/composables/useOptimisticToggle.d.ts +3 -1
  389. package/dist/composables/useOptimisticToggle.js +2 -1
  390. package/dist/composables/useOverlayHistory.d.ts +7 -0
  391. package/dist/composables/useOverlayHistory.js +16 -2
  392. package/dist/composables/usePaintSelect.js +18 -14
  393. package/dist/composables/usePaletteCommands.d.ts +7 -0
  394. package/dist/composables/usePaletteCommands.js +12 -1
  395. package/dist/composables/usePersisted.d.ts +10 -0
  396. package/dist/composables/usePersisted.js +1 -1
  397. package/dist/composables/usePillTransition.d.ts +2 -2
  398. package/dist/composables/usePillTransition.js +5 -5
  399. package/dist/composables/useResizeObserver.js +2 -1
  400. package/dist/composables/useReveal.js +2 -1
  401. package/dist/composables/useRovingFocus.d.ts +2 -2
  402. package/dist/composables/useRovingFocus.js +9 -11
  403. package/dist/composables/useScramble.js +7 -1
  404. package/dist/composables/useShift.js +8 -6
  405. package/dist/composables/useTilt.js +2 -1
  406. package/dist/composables/useTween.js +9 -5
  407. package/dist/composables/useView.d.ts +1 -0
  408. package/dist/composables/useView.js +14 -2
  409. package/dist/composables/useZoomPan.js +2 -4
  410. package/dist/composables/windowing.d.ts +40 -0
  411. package/dist/composables/windowing.js +118 -0
  412. package/dist/icons-all.js +1 -1
  413. package/dist/icons.d.ts +4 -0
  414. package/dist/index.d.ts +30 -5
  415. package/dist/index.js +310 -264
  416. package/dist/layout/tree.js +19 -15
  417. package/dist/layout/useLayout.d.ts +2 -0
  418. package/dist/layout/useLayout.js +5 -1
  419. package/dist/layout/useWorkspaces.d.ts +52 -0
  420. package/dist/layout/useWorkspaces.js +140 -0
  421. package/dist/{chunks/backdrop-Dkf2vM81.js → theme/backdrop.js} +5 -5
  422. package/dist/theme/config.js +25 -0
  423. package/dist/theme/define.js +61 -0
  424. package/dist/{chunks/palette-Co8tSASo.js → theme/palette.js} +2 -2
  425. package/dist/theme/presets.js +239 -0
  426. package/dist/theme/studio.js +134 -0
  427. package/dist/theme/tokens.js +63 -0
  428. package/dist/theme/useTheme.d.ts +3 -2
  429. package/dist/theme/useTheme.js +325 -0
  430. package/package.json +8 -1
  431. package/src/component-names.ts +5 -1
  432. package/src/components/AppShellContextNav.vue +44 -0
  433. package/src/components/ChartRangeSelector.vue +120 -0
  434. package/src/components/IconCloseButton.vue +21 -0
  435. package/src/components/LayoutCanvas.vue +3 -0
  436. package/src/components/LayoutNode.vue +37 -38
  437. package/src/components/LpActivityLine.vue +4 -2
  438. package/src/components/LpAddressInput.vue +3 -3
  439. package/src/components/LpAppShell.vue +362 -24
  440. package/src/components/LpAutocomplete.vue +18 -30
  441. package/src/components/LpBottomNav.vue +9 -1
  442. package/src/components/LpBreadcrumbs.vue +2 -1
  443. package/src/components/LpButton.vue +11 -4
  444. package/src/components/LpChart.vue +336 -37
  445. package/src/components/LpCheckbox.vue +43 -9
  446. package/src/components/LpCodeBlock.vue +17 -23
  447. package/src/components/LpCollapse.vue +5 -4
  448. package/src/components/LpColorPicker.vue +8 -9
  449. package/src/components/LpCommandPalette.vue +133 -50
  450. package/src/components/LpContextMenu.vue +15 -13
  451. package/src/components/LpCountdown.vue +2 -1
  452. package/src/components/LpDataList.vue +13 -1
  453. package/src/components/LpDatePicker.vue +5 -17
  454. package/src/components/LpDateRangePicker.vue +5 -16
  455. package/src/components/LpDock.vue +25 -16
  456. package/src/components/LpDrawer.vue +70 -61
  457. package/src/components/LpDropdownMenu.vue +6 -10
  458. package/src/components/LpDropzone.vue +12 -7
  459. package/src/components/LpEditable.vue +6 -2
  460. package/src/components/LpFileTree.vue +507 -66
  461. package/src/components/LpFileTreeNode.vue +106 -5
  462. package/src/components/LpFormField.vue +1 -1
  463. package/src/components/LpFrame.vue +33 -13
  464. package/src/components/LpHoverCard.vue +30 -5
  465. package/src/components/LpIcon.vue +6 -2
  466. package/src/components/LpIdenticon.vue +2 -1
  467. package/src/components/LpImageEditor.vue +5 -2
  468. package/src/components/LpInput.vue +15 -23
  469. package/src/components/LpInspector.vue +197 -0
  470. package/src/components/LpLightbox.vue +74 -29
  471. package/src/components/LpLogInspector.vue +85 -0
  472. package/src/components/LpLogViewer.vue +239 -29
  473. package/src/components/LpMapPicker.vue +2 -1
  474. package/src/components/LpMasonry.vue +8 -5
  475. package/src/components/LpModal.vue +12 -12
  476. package/src/components/LpModalNav.vue +2 -21
  477. package/src/components/LpNumberField.vue +6 -15
  478. package/src/components/LpOtpInput.vue +2 -2
  479. package/src/components/LpPagination.vue +5 -3
  480. package/src/components/LpPhoneInput.vue +8 -19
  481. package/src/components/LpPie.vue +25 -23
  482. package/src/components/LpPipeline.vue +14 -1
  483. package/src/components/LpPopover.vue +23 -2
  484. package/src/components/LpProgress.vue +2 -1
  485. package/src/components/LpRadioGroup.vue +2 -2
  486. package/src/components/LpRangeSlider.vue +5 -6
  487. package/src/components/LpRevealOnScroll.vue +1 -1
  488. package/src/components/LpScrollArea.vue +28 -11
  489. package/src/components/LpSecretField.vue +2 -1
  490. package/src/components/LpSegmented.vue +6 -8
  491. package/src/components/LpSelect.vue +54 -24
  492. package/src/components/LpShaderBackdrop.vue +12 -9
  493. package/src/components/LpShift.vue +18 -15
  494. package/src/components/LpSidebar.vue +77 -74
  495. package/src/components/LpSidebarNav.vue +3 -2
  496. package/src/components/LpSidebarRow.vue +2 -1
  497. package/src/components/LpSlider.vue +5 -6
  498. package/src/components/LpSpotlight.vue +2 -1
  499. package/src/components/LpSwitch.vue +5 -3
  500. package/src/components/LpTable.vue +609 -93
  501. package/src/components/LpTableFilter.vue +1 -1
  502. package/src/components/LpTableOfContents.vue +16 -9
  503. package/src/components/LpTabs.vue +2 -1
  504. package/src/components/LpTagsInput.vue +12 -19
  505. package/src/components/LpTextarea.vue +5 -11
  506. package/src/components/LpThemeProvider.vue +29 -13
  507. package/src/components/LpTimeField.vue +4 -7
  508. package/src/components/LpToaster.vue +7 -6
  509. package/src/components/LpTooltip.vue +62 -18
  510. package/src/components/LpTopologyCanvas.vue +567 -42
  511. package/src/components/LpTour.vue +7 -5
  512. package/src/components/LpTruncate.vue +4 -3
  513. package/src/components/LpTypewriter.vue +2 -1
  514. package/src/components/LpVideoBackdrop.vue +11 -13
  515. package/src/components/LpWindow.vue +373 -0
  516. package/src/components/LpWorkspaceSwitcher.vue +116 -0
  517. package/src/components/PickerField.vue +2 -2
  518. package/src/components/SliderRail.vue +10 -0
  519. package/src/components/address.ts +3 -1
  520. package/src/components/appShell.ts +74 -0
  521. package/src/components/calendar.ts +12 -5
  522. package/src/components/chart.ts +27 -3
  523. package/src/components/chartWindow.ts +198 -0
  524. package/src/components/color.ts +2 -1
  525. package/src/components/commandPalette.ts +66 -5
  526. package/src/components/controlSize.ts +6 -0
  527. package/src/components/dropdown.ts +3 -0
  528. package/src/components/exportData.ts +33 -18
  529. package/src/components/fileTree.ts +215 -0
  530. package/src/components/identicon.ts +4 -2
  531. package/src/components/logTools.ts +298 -0
  532. package/src/components/meter.ts +2 -1
  533. package/src/components/pipeline.ts +6 -0
  534. package/src/components/relativeTime.ts +2 -1
  535. package/src/components/reveal.ts +3 -1
  536. package/src/components/select.ts +14 -0
  537. package/src/components/sidebar.ts +1 -0
  538. package/src/components/tableFeatures.ts +149 -0
  539. package/src/components/topologyGraph.ts +655 -0
  540. package/src/components/tour.ts +5 -3
  541. package/src/components/videoBackdrop.ts +7 -6
  542. package/src/composables/clamp.ts +2 -0
  543. package/src/composables/devWarn.ts +19 -0
  544. package/src/composables/easing.ts +37 -12
  545. package/src/composables/overlayHistory.ts +24 -0
  546. package/src/composables/pointerDrag.ts +54 -0
  547. package/src/composables/propCheck.ts +90 -0
  548. package/src/composables/realm.ts +25 -0
  549. package/src/composables/scroll.ts +4 -2
  550. package/src/composables/scrollMemory.ts +56 -14
  551. package/src/composables/spatialNav.ts +2 -1
  552. package/src/composables/textEntry.ts +33 -0
  553. package/src/composables/useAsyncTask.ts +6 -0
  554. package/src/composables/useChartSync.ts +52 -0
  555. package/src/composables/useCloseGuard.ts +22 -10
  556. package/src/composables/useCommands.ts +123 -0
  557. package/src/composables/useField.ts +41 -2
  558. package/src/composables/useFitScale.ts +4 -1
  559. package/src/composables/useFormDraft.ts +38 -14
  560. package/src/composables/useHintSystem.ts +2 -2
  561. package/src/composables/useHotkeys.ts +19 -48
  562. package/src/composables/useInView.ts +2 -1
  563. package/src/composables/useInputFilter.ts +8 -5
  564. package/src/composables/useInputMask.ts +8 -3
  565. package/src/composables/useLinkedView.ts +222 -0
  566. package/src/composables/useOptimisticToggle.ts +7 -1
  567. package/src/composables/useOverlayHistory.ts +20 -0
  568. package/src/composables/usePaintSelect.ts +20 -14
  569. package/src/composables/usePaletteCommands.ts +13 -0
  570. package/src/composables/usePersisted.ts +10 -0
  571. package/src/composables/usePillTransition.ts +9 -6
  572. package/src/composables/useResizeObserver.ts +2 -1
  573. package/src/composables/useReveal.ts +2 -1
  574. package/src/composables/useRovingFocus.ts +11 -14
  575. package/src/composables/useScramble.ts +12 -1
  576. package/src/composables/useShift.ts +8 -6
  577. package/src/composables/useTilt.ts +2 -1
  578. package/src/composables/useTween.ts +10 -5
  579. package/src/composables/useView.ts +17 -3
  580. package/src/composables/useZoomPan.ts +2 -5
  581. package/src/composables/windowing.ts +190 -0
  582. package/src/icons.ts +27 -6
  583. package/src/index.ts +41 -4
  584. package/src/kit-icons.ts +1 -1
  585. package/src/layout/tree.ts +31 -16
  586. package/src/layout/useLayout.ts +6 -0
  587. package/src/layout/useWorkspaces.ts +234 -0
  588. package/src/nuxt.ts +9 -1
  589. package/src/runtime/propCheck.plugin.ts +10 -0
  590. package/src/theme/studio.ts +7 -5
  591. package/src/theme/useTheme.ts +89 -15
  592. package/src/tokens/tokens.css +8 -1
  593. package/dist/assets/LpTabs-CJ0rYQbx.css +0 -18
  594. package/dist/chunks/LpAppShell-Dgejipzz.js +0 -319
  595. package/dist/chunks/LpFileTree-CooHinsC.js +0 -425
  596. package/dist/chunks/LpThemeProvider-8MG6yqU9.js +0 -640
  597. package/dist/chunks/LpTopologyCanvas-B1gIbS0n.js +0 -298
@@ -1,18 +1,25 @@
1
- import { defineComponent, ref, computed, onMounted, watch, shallowRef, openBlock, createElementBlock, mergeProps, unref, createBlock, createCommentVNode, createElementVNode, toDisplayString, renderSlot, Fragment, renderList, normalizeClass, createVNode, withCtx, normalizeStyle, createSlots, withDirectives, vShow, createTextVNode } from "vue";
1
+ import { defineComponent, ref, computed, onMounted, shallowRef, watch, nextTick, useId, openBlock, createElementBlock, mergeProps, unref, createBlock, createCommentVNode, createElementVNode, toDisplayString, renderSlot, Fragment, renderList, normalizeClass, createVNode, withCtx, normalizeStyle, createSlots, withDirectives, vShow, createTextVNode } from "vue";
2
+ import { clamp } from "../composables/clamp.js";
2
3
  import { Motion } from "motion-v";
4
+ import { useChartSync } from "../composables/useChartSync.js";
3
5
  import { useLabels } from "../composables/useLpConfig.js";
4
- import { prefersReducedMotion, easeTravel } from "../composables/easing.js";
6
+ import { easeTravel } from "../composables/easing.js";
7
+ import { usePrefersReducedMotion } from "../composables/useReducedMotion.js";
8
+ import { startPointerDrag } from "../composables/pointerDrag.js";
9
+ import { nodeWindow } from "../composables/realm.js";
5
10
  import { usePillTransition } from "../composables/usePillTransition.js";
6
11
  import { useReveal } from "../composables/useReveal.js";
7
12
  import { useTween, lerp, mixValues, resample } from "../composables/useTween.js";
8
13
  import { normalise, pointCount, resolveLabels, extent, axisTicks, fitScale, plotHeight, plotWidth, xLabelIndices, xAt, yAt, areaPath, linePath, barPath, markerIndex, chartSummary, niceScale, nearestIndex, formatTick } from "./chart.js";
14
+ import { _ as _sfc_main$8 } from "../chunks/ChartRangeSelector-HO0sMMz6.js";
15
+ import { clampRange, chartView, sourceOf, slotOf, ZOOM_STEP, zoomRange } from "./chartWindow.js";
9
16
  import { PANEL_SURFACE } from "./dropdown.js";
10
17
  import { _ as _sfc_main$2 } from "../chunks/LegendSwatch-BhRjrtzv.js";
11
- import { _ as _sfc_main$3 } from "../chunks/LpContextMenu-rx2tCjwk.js";
12
- import { _ as _sfc_main$6 } from "../chunks/LpEmptyState-EQHiRYhG.js";
13
- import { _ as _sfc_main$7 } from "../chunks/LpShift-CCq7dofl.js";
18
+ import { _ as _sfc_main$3 } from "../chunks/LpContextMenu--eMGIql6.js";
19
+ import { _ as _sfc_main$6 } from "../chunks/LpEmptyState-DurPF001.js";
20
+ import { _ as _sfc_main$7 } from "../chunks/LpShift-DAgS_d2x.js";
14
21
  import { _ as _sfc_main$5 } from "../chunks/LpSkeleton-BB6XIV-w.js";
15
- import { _ as _sfc_main$4 } from "../chunks/LpSwap-C96c0LWh.js";
22
+ import { _ as _sfc_main$4 } from "../chunks/LpSwap-M7nFeW3C.js";
16
23
  import { sampleValues, skeletonHeights, skeletonWave } from "./chartSkeleton.js";
17
24
  import { _ as _sfc_main$1 } from "../chunks/HintSampleTag-BV8AZXZh.js";
18
25
  import { useSample } from "../composables/useSample.js";
@@ -82,33 +89,38 @@ const _hoisted_30 = ["x", "y"];
82
89
  const _hoisted_31 = ["x1", "x2", "y1", "y2"];
83
90
  const _hoisted_32 = ["x", "y", "width", "height"];
84
91
  const _hoisted_33 = ["x", "y", "width", "height", "fill"];
85
- const _hoisted_34 = ["clip-path"];
86
- const _hoisted_35 = ["d", "fill", "opacity"];
87
- const _hoisted_36 = ["d", "fill"];
88
- const _hoisted_37 = ["d", "stroke", "stroke-dasharray"];
89
- const _hoisted_38 = ["cx", "cy", "fill"];
90
- const _hoisted_39 = ["x1", "x2", "y1", "y2", "stroke", "stroke-dasharray"];
91
- const _hoisted_40 = ["x", "y", "fill"];
92
- const _hoisted_41 = ["x1", "x2", "y1", "y2", "stroke"];
92
+ const _hoisted_34 = ["x", "y", "fill"];
93
+ const _hoisted_35 = ["x", "y", "width", "height", "fill"];
94
+ const _hoisted_36 = ["clip-path"];
95
+ const _hoisted_37 = ["d", "fill", "opacity"];
96
+ const _hoisted_38 = ["d", "fill"];
97
+ const _hoisted_39 = ["d", "stroke", "stroke-dasharray"];
98
+ const _hoisted_40 = ["cx", "cy", "fill"];
99
+ const _hoisted_41 = ["x1", "x2", "y1", "y2", "stroke", "stroke-dasharray"];
93
100
  const _hoisted_42 = ["x", "y", "fill"];
94
- const _hoisted_43 = { key: 3 };
95
- const _hoisted_44 = ["x1", "x2", "y1", "y2"];
101
+ const _hoisted_43 = ["x1", "x2", "y1", "y2", "stroke"];
102
+ const _hoisted_44 = ["x", "y", "fill"];
96
103
  const _hoisted_45 = ["cx", "cy", "fill"];
97
- const _hoisted_46 = ["x", "y"];
98
- const _hoisted_47 = { class: "mb-1 text-[11px] font-medium text-muted-strong" };
99
- const _hoisted_48 = { class: "flex flex-col gap-1" };
100
- const _hoisted_49 = { class: "flex items-center gap-1.5 text-muted" };
101
- const _hoisted_50 = { class: "font-mono tabular-nums text-ink" };
102
- const _hoisted_51 = {
104
+ const _hoisted_46 = ["x", "y", "text-anchor", "fill"];
105
+ const _hoisted_47 = ["x", "y", "width", "height"];
106
+ const _hoisted_48 = { key: 4 };
107
+ const _hoisted_49 = ["x1", "x2", "y1", "y2"];
108
+ const _hoisted_50 = ["cx", "cy", "fill"];
109
+ const _hoisted_51 = ["x", "y"];
110
+ const _hoisted_52 = { class: "mb-1 text-[11px] font-medium text-muted-strong" };
111
+ const _hoisted_53 = { class: "flex flex-col gap-1" };
112
+ const _hoisted_54 = { class: "flex items-center gap-1.5 text-muted" };
113
+ const _hoisted_55 = { class: "font-mono tabular-nums text-ink" };
114
+ const _hoisted_56 = {
103
115
  class: "sr-only",
104
116
  "aria-live": "polite"
105
117
  };
106
- const _hoisted_52 = {
107
- key: 3,
118
+ const _hoisted_57 = {
119
+ key: 4,
108
120
  class: "sr-only"
109
121
  };
110
- const _hoisted_53 = { key: 0 };
111
- const _hoisted_54 = { scope: "row" };
122
+ const _hoisted_58 = { key: 0 };
123
+ const _hoisted_59 = { scope: "row" };
112
124
  const __default__ = { inheritAttrs: false };
113
125
  const _sfc_main = /* @__PURE__ */ defineComponent({
114
126
  ...__default__,
@@ -141,29 +153,45 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
141
153
  loading: { type: Boolean },
142
154
  thresholds: { default: () => [] },
143
155
  markers: { default: () => [] },
156
+ bands: { default: () => [] },
157
+ annotations: { default: () => [] },
158
+ range: { default: void 0 },
159
+ rangeSelector: { type: Boolean },
160
+ zoomable: { type: Boolean },
161
+ downsample: { type: [String, Boolean] },
162
+ maxPoints: {},
163
+ syncGroup: {},
144
164
  ariaLabel: {},
145
165
  dataTable: { type: Boolean, default: false },
146
166
  text: {},
147
167
  menuItems: {}
148
168
  },
149
- emits: ["pointClick", "pointContextMenu"],
169
+ emits: ["pointClick", "pointContextMenu", "update:range"],
150
170
  setup(__props, { expose: __expose, emit: __emit }) {
151
171
  const props = __props;
152
172
  const strings = useLabels(
153
173
  "chart",
154
- { empty: "No data", loading: "Loading", rightAxis: "Measured on the right axis", point: "Point", xColumn: "Label" },
174
+ {
175
+ empty: "No data",
176
+ loading: "Loading",
177
+ rightAxis: "Measured on the right axis",
178
+ point: "Point",
179
+ xColumn: "Label",
180
+ rangeStart: "Start of the range",
181
+ rangeEnd: "End of the range",
182
+ resetZoom: "Show all"
183
+ },
155
184
  () => props.text
156
185
  );
157
186
  const emit = __emit;
158
187
  const root = ref(null);
159
188
  const width = ref(0);
160
189
  const { el: revealAnchor, revealed } = useReveal({ immediate: () => !props.animate });
161
- const reduced = ref(false);
190
+ const reduced = usePrefersReducedMotion();
162
191
  const still = computed(() => !props.animate || reduced.value);
163
192
  const drawing = computed(() => !still.value && revealed.value);
164
193
  onMounted(() => {
165
194
  revealAnchor.value = root.value;
166
- reduced.value = prefersReducedMotion();
167
195
  });
168
196
  useResizeObserver(root, (entry, el) => width.value = entry ? entry.contentRect.width : el.clientWidth, {
169
197
  immediate: true
@@ -173,7 +201,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
173
201
  const next = new Set(hidden.value);
174
202
  if (next.has(id)) next.delete(id);
175
203
  else next.add(id);
176
- if (next.size < source.value.length) hidden.value = next;
204
+ if (allSeries.value.some((s) => !next.has(s.id))) hidden.value = next;
177
205
  };
178
206
  const SAMPLE_POINTS = 12;
179
207
  const sampling = useSample(
@@ -187,21 +215,56 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
187
215
  const series = props.series.length ? props.series : [{ name: "", data: [] }];
188
216
  return series.map((s, i) => ({ ...s, data: sampleValues(count2, i) }));
189
217
  });
190
- const allSeries = computed(
218
+ const fullSeries = computed(
191
219
  () => normalise(source.value).map((s, i) => ({ ...s, id: `${i}:${s.name}` }))
192
220
  );
221
+ const fullCount = computed(() => pointCount(fullSeries.value));
222
+ const fullLabels = computed(() => resolveLabels(source.value, props.labels, fullCount.value));
223
+ const ownRange = shallowRef(null);
224
+ const range = computed(() => clampRange(props.range === void 0 ? ownRange.value : props.range, fullCount.value));
225
+ const view = computed(
226
+ () => chartView(
227
+ fullSeries.value.map((s) => s.values),
228
+ fullCount.value,
229
+ range.value,
230
+ props.type === "bar" ? false : props.downsample,
231
+ props.maxPoints ?? Math.floor(width.value)
232
+ )
233
+ );
234
+ const narrowed = computed(() => range.value !== null || view.value.indices !== null);
235
+ const allSeries = computed(
236
+ () => narrowed.value ? fullSeries.value.map((s, i) => ({ ...s, values: view.value.values[i] })) : fullSeries.value
237
+ );
238
+ function setRange(next) {
239
+ ownRange.value = next;
240
+ emit("update:range", next);
241
+ }
242
+ let rangeMoving = false;
243
+ watch(
244
+ () => `${range.value?.start}:${range.value?.end}`,
245
+ () => {
246
+ rangeMoving = true;
247
+ void nextTick(() => rangeMoving = false);
248
+ },
249
+ { flush: "sync" }
250
+ );
193
251
  const visible = computed(() => allSeries.value.filter((s) => !hidden.value.has(s.id)));
194
252
  const seeded = /* @__PURE__ */ new Set();
195
253
  watch(
196
254
  () => props.series.map((s, i) => [`${i}:${s.name}`, !!s.hidden]),
197
255
  (entries) => {
198
- let next = null;
256
+ if (!entries.length) return;
257
+ const ids = new Set(entries.map(([id]) => id));
258
+ for (const id of seeded) if (!ids.has(id)) seeded.delete(id);
259
+ const kept = [...hidden.value].filter((id) => ids.has(id));
260
+ const next = new Set(kept);
199
261
  for (const [id, off] of entries) {
200
262
  if (seeded.has(id)) continue;
201
263
  seeded.add(id);
202
- if (off) (next ??= new Set(hidden.value)).add(id);
264
+ if (off) next.add(id);
203
265
  }
204
- if (next && next.size < entries.length) hidden.value = next;
266
+ const allowed = next.size < entries.length ? next : new Set(kept);
267
+ if (allowed.size !== hidden.value.size || [...allowed].some((id) => !hidden.value.has(id))) hidden.value = allowed;
205
268
  },
206
269
  { immediate: true }
207
270
  );
@@ -209,7 +272,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
209
272
  const settle = {
210
273
  duration: SETTLE_MS,
211
274
  ease: easeTravel,
212
- enabled: () => props.animate
275
+ enabled: () => props.animate && !rangeMoving
213
276
  };
214
277
  const presenceTargets = computed(
215
278
  () => new Map(allSeries.value.map((s) => [s.id, hidden.value.has(s.id) ? 0 : 1]))
@@ -254,7 +317,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
254
317
  * itself in on its own entrance — a morph from readings nobody saw would
255
318
  * only muddy it.
256
319
  */
257
- enabled: () => props.animate && revealed.value && !!svgEl.value
320
+ enabled: () => props.animate && !rangeMoving && revealed.value && !!svgEl.value
258
321
  });
259
322
  const drawnById = computed(() => {
260
323
  const out = /* @__PURE__ */ new Map();
@@ -262,10 +325,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
262
325
  return out;
263
326
  });
264
327
  const count = computed(() => pointCount(allSeries.value));
265
- const labels = computed(() => resolveLabels(source.value, props.labels, count.value));
328
+ const labels = computed(
329
+ () => narrowed.value ? Array.from({ length: count.value }, (_, slot) => fullLabels.value[sourceOf(view.value, slot)] ?? "") : fullLabels.value
330
+ );
266
331
  const banded = computed(() => props.type === "bar");
267
332
  const hasData = computed(
268
- () => allSeries.value.some((s) => s.values.some((v) => v != null))
333
+ () => fullSeries.value.some((s) => s.values.some((v) => v != null))
269
334
  );
270
335
  const ready = computed(() => hasData.value && !props.loading);
271
336
  const plotState = computed(() => props.loading ? "loading" : hasData.value ? "plot" : "empty");
@@ -431,23 +496,24 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
431
496
  );
432
497
  const baseY = computed(
433
498
  () => yAt(
434
- Math.max(scale.value.min, Math.min(scale.value.max, 0)),
499
+ clamp(0, scale.value.min, scale.value.max),
435
500
  scale.value.min,
436
501
  scale.value.max,
437
502
  box.value
438
503
  )
439
504
  );
505
+ const curve = computed(() => view.value.indices ? 0 : props.smooth);
440
506
  const lines = computed(
441
507
  () => drawnSeries.value.map((s) => {
442
508
  const g = geoOf(s);
443
509
  const p = presenceOf(s.id) * s.enter;
444
- const base = Math.min(Math.max(0, g.min), g.max);
510
+ const base = clamp(0, g.min, g.max);
445
511
  const values = p === 1 ? s.values : s.values.map((v) => v == null ? null : base + (v - base) * p);
446
512
  return {
447
513
  ...s,
448
514
  values,
449
- d: linePath(values, g, props.smooth),
450
- fill: props.type === "area" ? areaPath(values, g, props.smooth) : "",
515
+ d: linePath(values, g, curve.value),
516
+ fill: props.type === "area" ? areaPath(values, g, curve.value) : "",
451
517
  /* A dashed series is a reference level (a budget, a target), not a
452
518
  measurement — dotting it implies readings that aren't there. */
453
519
  points: props.showPoints && !s.dashed,
@@ -488,7 +554,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
488
554
  } else {
489
555
  const sc = scaleOf(s);
490
556
  const top = yAt(v, sc.min, sc.max, box.value);
491
- const base = yAt(Math.max(sc.min, Math.min(sc.max, 0)), sc.min, sc.max, box.value);
557
+ const base = yAt(clamp(0, sc.min, sc.max), sc.min, sc.max, box.value);
492
558
  y = Math.min(top, base);
493
559
  h = Math.abs(top - base);
494
560
  }
@@ -531,6 +597,37 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
531
597
  });
532
598
  const active = ref(-1);
533
599
  const pointer = ref({ x: 0, y: 0 });
600
+ const { peerLabel, publish } = useChartSync(() => props.syncGroup);
601
+ const labelIndex = computed(() => props.syncGroup ? new Map(fullLabels.value.map((label, i) => [label, i])) : null);
602
+ const peerSlot = computed(() => {
603
+ const source2 = peerLabel.value == null ? void 0 : labelIndex.value?.get(peerLabel.value);
604
+ return source2 === void 0 ? -1 : slotOf(view.value, source2);
605
+ });
606
+ const crosshair = computed(() => active.value >= 0 ? active.value : peerSlot.value);
607
+ watch(active, (slot) => publish(slot >= 0 ? labels.value[slot] ?? null : null));
608
+ const SELECT_SLOP = 4;
609
+ let swallowClick = false;
610
+ const selection = ref(null);
611
+ const onPointerDown = (e) => {
612
+ if (!props.zoomable || e.button !== 0) return;
613
+ const el = e.currentTarget;
614
+ const offset = (ev) => ev.clientX - el.getBoundingClientRect().left;
615
+ const pressedAt = offset(e);
616
+ startPointerDrag(e, {
617
+ move(ev) {
618
+ const x = offset(ev);
619
+ if (Math.abs(x - pressedAt) > SELECT_SLOP) selection.value = { from: pressedAt, to: x };
620
+ },
621
+ end(completed) {
622
+ const picked = selection.value;
623
+ selection.value = null;
624
+ if (!completed || !picked) return;
625
+ swallowClick = true;
626
+ const ends = [picked.from, picked.to].map((x) => sourceOf(view.value, nearestIndex(x, geo.value)));
627
+ setRange(clampRange({ start: ends[0], end: ends[1] }, fullCount.value));
628
+ }
629
+ });
630
+ };
534
631
  const onMove = (e) => {
535
632
  keyboard.value = false;
536
633
  const el = e.currentTarget;
@@ -539,16 +636,39 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
539
636
  pointer.value = { x, y: e.clientY - rect.top };
540
637
  active.value = nearestIndex(x, geo.value);
541
638
  };
639
+ const selectionBox = computed(() => {
640
+ if (!selection.value) return null;
641
+ const right = box.value.width - box.value.right;
642
+ const [from, to] = [selection.value.from, selection.value.to].map((x) => clamp(x, box.value.left, right));
643
+ return { x: Math.min(from, to), width: Math.abs(to - from) };
644
+ });
645
+ function zoomBy(factor, anchor) {
646
+ setRange(zoomRange(range.value, fullCount.value, anchor, factor));
647
+ }
648
+ const onWheel = (e) => {
649
+ if (!props.zoomable || !e.ctrlKey || !ready.value) return;
650
+ e.preventDefault();
651
+ const rect = e.currentTarget.getBoundingClientRect();
652
+ const plot = plotWidth(box.value) || 1;
653
+ zoomBy(e.deltaY < 0 ? ZOOM_STEP : 1 / ZOOM_STEP, (e.clientX - rect.left - box.value.left) / plot);
654
+ };
655
+ const resetZoom = () => {
656
+ if (range.value) setRange(null);
657
+ };
542
658
  const onLeave = () => {
543
659
  active.value = -1;
544
660
  };
545
661
  const pointEvent = (originalEvent) => ({
546
- index: active.value,
662
+ index: sourceOf(view.value, active.value),
547
663
  label: labels.value[active.value] ?? "",
548
664
  values: allSeries.value.map((s) => s.values[active.value] ?? null),
549
665
  originalEvent
550
666
  });
551
667
  const onClick = (e) => {
668
+ if (swallowClick) {
669
+ swallowClick = false;
670
+ return;
671
+ }
552
672
  const rect = e.currentTarget.getBoundingClientRect();
553
673
  active.value = nearestIndex(e.clientX - rect.left, geo.value);
554
674
  if (active.value < 0) return;
@@ -566,13 +686,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
566
686
  emit("pointContextMenu", menuPoint.value);
567
687
  };
568
688
  const activeX = computed(
569
- () => active.value < 0 ? 0 : xAt(active.value, count.value, box.value, banded.value)
689
+ () => crosshair.value < 0 ? 0 : xAt(crosshair.value, count.value, box.value, banded.value)
570
690
  );
571
691
  const activePoints = computed(() => {
572
- if (active.value < 0) return [];
573
- return visible.value.map((s) => ({ s, v: s.values[active.value] })).filter((r) => r.v != null).map(({ s, v }) => {
692
+ if (crosshair.value < 0) return [];
693
+ return visible.value.map((s) => ({ s, v: s.values[crosshair.value] })).filter((r) => r.v != null).map(({ s, v }) => {
574
694
  const sc = scaleOf(s);
575
- const at = drawnById.value.get(s.id)?.values[active.value] ?? v;
695
+ const at = drawnById.value.get(s.id)?.values[crosshair.value] ?? v;
576
696
  return {
577
697
  color: s.color,
578
698
  id: s.id,
@@ -612,7 +732,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
612
732
  revealKey.value++;
613
733
  }
614
734
  );
615
- const clipId = `lp-chart-${Math.random().toString(36).slice(2, 9)}`;
735
+ const clipId = `lp-chart-${useId()}`;
616
736
  const gradientId = (name, index) => `${clipId}-g-${index}-${name.replace(/[^a-zA-Z0-9_-]/g, "-")}`;
617
737
  const thresholdMarks = computed(
618
738
  () => props.thresholds.flatMap((t, i) => {
@@ -635,7 +755,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
635
755
  );
636
756
  const markerMarks = computed(
637
757
  () => props.markers.flatMap((m, i) => {
638
- const index = markerIndex(m.at, labels.value, count.value);
758
+ const index = slotOf(view.value, markerIndex(m.at, fullLabels.value, fullCount.value));
639
759
  if (index < 0 || width.value <= 0) return [];
640
760
  return [
641
761
  {
@@ -647,6 +767,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
647
767
  ];
648
768
  })
649
769
  );
770
+ const xOfSource = (source2) => {
771
+ if (source2 < view.value.start) return box.value.left;
772
+ if (source2 > view.value.end) return box.value.width - box.value.right;
773
+ return xAt(slotOf(view.value, source2), count.value, box.value, banded.value);
774
+ };
775
+ const bandMarks = computed(
776
+ () => props.bands.flatMap((b, i) => {
777
+ const ends = [markerIndex(b.from, fullLabels.value, fullCount.value), markerIndex(b.to, fullLabels.value, fullCount.value)];
778
+ if (ends.some((end) => end < 0) || width.value <= 0) return [];
779
+ const from = Math.min(...ends);
780
+ const to = Math.max(...ends);
781
+ if (to < view.value.start || from > view.value.end) return [];
782
+ const x = xOfSource(from);
783
+ return [{ key: i, x, width: xOfSource(to) - x, label: b.label, color: b.color ?? "var(--color-line-strong)" }];
784
+ })
785
+ );
786
+ const annotationMarks = computed(
787
+ () => props.annotations.flatMap((a, i) => {
788
+ const source2 = markerIndex(a.at, fullLabels.value, fullCount.value);
789
+ const slot = slotOf(view.value, source2);
790
+ const lead = fullSeries.value.find((s) => !hidden.value.has(s.id) && s.values[source2] != null);
791
+ const value = a.value ?? lead?.values[source2];
792
+ if (slot < 0 || value == null || width.value <= 0) return [];
793
+ const sc = (a.value == null ? lead?.axis : a.axis) === "right" && rightScale.value ? rightScale.value : scale.value;
794
+ const x = xAt(slot, count.value, box.value, banded.value);
795
+ return [
796
+ {
797
+ key: i,
798
+ x,
799
+ y: yAt(value, sc.min, sc.max, box.value),
800
+ label: a.label,
801
+ color: a.color ?? "var(--color-ink)",
802
+ anchor: x > box.value.width - CARD_W ? "end" : "start"
803
+ }
804
+ ];
805
+ })
806
+ );
650
807
  const summary = computed(
651
808
  () => props.ariaLabel ?? chartSummary(visible.value, labels.value, fmtSeries, props.title)
652
809
  );
@@ -672,11 +829,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
672
829
  case " ":
673
830
  if (active.value < 0) return;
674
831
  e.preventDefault();
675
- emit("pointClick", pointEvent(new MouseEvent("click")));
832
+ emit("pointClick", pointEvent(new (nodeWindow(e.target)).MouseEvent("click")));
676
833
  return;
677
834
  case "Escape":
678
835
  active.value = -1;
679
836
  return;
837
+ case "+":
838
+ case "=":
839
+ case "-":
840
+ if (!props.zoomable) return;
841
+ e.preventDefault();
842
+ zoomBy(e.key === "-" ? 1 / ZOOM_STEP : ZOOM_STEP, active.value < 0 ? 0.5 : active.value / last);
843
+ return;
844
+ case "0":
845
+ if (!props.zoomable) return;
846
+ e.preventDefault();
847
+ resetZoom();
848
+ return;
680
849
  default:
681
850
  return;
682
851
  }
@@ -698,20 +867,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
698
867
  );
699
868
  const svgEl = ref(null);
700
869
  function exportCsv(options = {}) {
701
- const rows = labels.value.map((label, i) => ({ label, i }));
870
+ const rows = fullLabels.value.map((label, i) => ({ label, i }));
702
871
  const csv = toCsv(rows, [
703
872
  { key: "label", label: strings.value.xColumn },
704
- ...allSeries.value.map((s) => ({ key: s.id, label: s.name, value: (r) => s.values[r.i] }))
873
+ ...fullSeries.value.map((s) => ({ key: s.id, label: s.name, value: (r) => s.values[r.i] }))
705
874
  ], options);
706
875
  if (options.download !== false) {
707
- downloadFile(`${fileStem(options.filename ?? props.title, "chart")}.csv`, csv, "text/csv;charset=utf-8");
876
+ downloadFile(`${fileStem(options.filename ?? props.title, "chart")}.csv`, csv, "text/csv;charset=utf-8", svgEl.value?.ownerDocument);
708
877
  }
709
878
  return csv;
710
879
  }
711
880
  async function exportPng(options = {}) {
712
881
  const svg = svgEl.value;
713
- if (!svg || typeof document === "undefined") return null;
714
- const style = getComputedStyle(root.value ?? svg);
882
+ if (!svg) return null;
883
+ const style = nodeWindow(svg).getComputedStyle(root.value ?? svg);
715
884
  const font = style.fontFamily;
716
885
  const ink = style.getPropertyValue("--color-ink").trim() || style.color;
717
886
  const muted = style.getPropertyValue("--color-muted-strong").trim() || style.color;
@@ -747,7 +916,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
747
916
  return y ? y + 8 : 0;
748
917
  }
749
918
  });
750
- if (options.download !== false) downloadFile(`${fileStem(options.filename ?? props.title, "chart")}.png`, blob);
919
+ if (options.download !== false) downloadFile(`${fileStem(options.filename ?? props.title, "chart")}.png`, blob, void 0, svgEl.value?.ownerDocument);
751
920
  return blob;
752
921
  }
753
922
  __expose({ exportCsv, exportPng });
@@ -896,9 +1065,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
896
1065
  height: __props.height,
897
1066
  class: "block overflow-visible touch-none select-none",
898
1067
  "aria-hidden": "true",
1068
+ onPointerdown: onPointerDown,
899
1069
  onPointermove: onMove,
900
1070
  onPointerleave: onLeave,
901
1071
  onClick,
1072
+ onDblclick: _cache[0] || (_cache[0] = ($event) => __props.zoomable && resetZoom()),
1073
+ onWheel,
902
1074
  onContextmenu: onContextMenu
903
1075
  }, [
904
1076
  createElementVNode("defs", null, [
@@ -998,6 +1170,27 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
998
1170
  fill: "var(--color-surface-soft)",
999
1171
  opacity: "0.5"
1000
1172
  }, null, 8, _hoisted_32)) : createCommentVNode("", true),
1173
+ (openBlock(true), createElementBlock(Fragment, null, renderList(bandMarks.value, (b) => {
1174
+ return openBlock(), createElementBlock("g", {
1175
+ key: `x-band-${b.key}`
1176
+ }, [
1177
+ createElementVNode("rect", {
1178
+ x: b.x,
1179
+ y: box.value.top,
1180
+ width: b.width,
1181
+ height: unref(plotHeight)(box.value),
1182
+ fill: b.color,
1183
+ opacity: "0.1"
1184
+ }, null, 8, _hoisted_33),
1185
+ b.label ? (openBlock(), createElementBlock("text", {
1186
+ key: 0,
1187
+ x: b.x + 4,
1188
+ y: box.value.top + 9,
1189
+ class: "text-[10px]",
1190
+ fill: b.color
1191
+ }, toDisplayString(b.label), 9, _hoisted_34)) : createCommentVNode("", true)
1192
+ ]);
1193
+ }), 128)),
1001
1194
  (openBlock(true), createElementBlock(Fragment, null, renderList(thresholdMarks.value.filter((m) => m.height > 0), (t) => {
1002
1195
  return openBlock(), createElementBlock("rect", {
1003
1196
  key: `band-${t.key}`,
@@ -1007,7 +1200,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1007
1200
  height: t.height,
1008
1201
  fill: t.color,
1009
1202
  opacity: "0.08"
1010
- }, null, 8, _hoisted_33);
1203
+ }, null, 8, _hoisted_35);
1011
1204
  }), 128)),
1012
1205
  createElementVNode("g", {
1013
1206
  "clip-path": `url(#${clipId}-reveal)`
@@ -1019,7 +1212,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1019
1212
  fill: b.color,
1020
1213
  class: "transition-opacity duration-fast",
1021
1214
  opacity: active.value < 0 || active.value === b.index ? 1 : 0.45
1022
- }, null, 8, _hoisted_35);
1215
+ }, null, 8, _hoisted_37);
1023
1216
  }), 128)),
1024
1217
  (openBlock(true), createElementBlock(Fragment, null, renderList(lines.value, (s, i) => {
1025
1218
  return openBlock(), createElementBlock("g", {
@@ -1029,7 +1222,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1029
1222
  withDirectives(createElementVNode("path", {
1030
1223
  d: s.fill,
1031
1224
  fill: `url(#${gradientId(s.name, i)})`
1032
- }, null, 8, _hoisted_36), [
1225
+ }, null, 8, _hoisted_38), [
1033
1226
  [vShow, __props.type === "area"]
1034
1227
  ]),
1035
1228
  withDirectives(createElementVNode("path", {
@@ -1040,7 +1233,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1040
1233
  "stroke-linecap": "round",
1041
1234
  "stroke-linejoin": "round",
1042
1235
  "stroke-dasharray": s.dashed ? "5 4" : void 0
1043
- }, null, 8, _hoisted_37), [
1236
+ }, null, 8, _hoisted_39), [
1044
1237
  [vShow, __props.type !== "bar"]
1045
1238
  ]),
1046
1239
  __props.type !== "bar" && s.points ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(s.values, (v, j) => {
@@ -1050,13 +1243,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1050
1243
  cy: v == null ? 0 : unref(yAt)(v, s.scale.min, s.scale.max, box.value),
1051
1244
  r: "2.5",
1052
1245
  fill: s.color
1053
- }, null, 8, _hoisted_38)), [
1246
+ }, null, 8, _hoisted_40)), [
1054
1247
  [vShow, v != null]
1055
1248
  ]);
1056
1249
  }), 128)) : createCommentVNode("", true)
1057
1250
  ], 4);
1058
1251
  }), 128))
1059
- ], 8, _hoisted_34),
1252
+ ], 8, _hoisted_36),
1060
1253
  (openBlock(true), createElementBlock(Fragment, null, renderList(thresholdMarks.value, (t) => {
1061
1254
  return openBlock(), createElementBlock("g", {
1062
1255
  key: `t-${t.key}`
@@ -1069,7 +1262,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1069
1262
  stroke: t.color,
1070
1263
  "stroke-width": "1",
1071
1264
  "stroke-dasharray": t.solid ? void 0 : "4 3"
1072
- }, null, 8, _hoisted_39),
1265
+ }, null, 8, _hoisted_41),
1073
1266
  t.label ? (openBlock(), createElementBlock("text", {
1074
1267
  key: 0,
1075
1268
  x: box.value.width - box.value.right - 4,
@@ -1077,7 +1270,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1077
1270
  "text-anchor": "end",
1078
1271
  class: "text-[10px]",
1079
1272
  fill: t.color
1080
- }, toDisplayString(t.label), 9, _hoisted_40)) : createCommentVNode("", true)
1273
+ }, toDisplayString(t.label), 9, _hoisted_42)) : createCommentVNode("", true)
1081
1274
  ]);
1082
1275
  }), 128)),
1083
1276
  (openBlock(true), createElementBlock(Fragment, null, renderList(markerMarks.value, (m) => {
@@ -1092,17 +1285,48 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1092
1285
  stroke: m.color,
1093
1286
  "stroke-width": "1",
1094
1287
  "stroke-dasharray": "2 3"
1095
- }, null, 8, _hoisted_41),
1288
+ }, null, 8, _hoisted_43),
1096
1289
  m.label ? (openBlock(), createElementBlock("text", {
1097
1290
  key: 0,
1098
1291
  x: m.x + 4,
1099
1292
  y: box.value.top + 9,
1100
1293
  class: "text-[10px]",
1101
1294
  fill: m.color
1102
- }, toDisplayString(m.label), 9, _hoisted_42)) : createCommentVNode("", true)
1295
+ }, toDisplayString(m.label), 9, _hoisted_44)) : createCommentVNode("", true)
1296
+ ]);
1297
+ }), 128)),
1298
+ (openBlock(true), createElementBlock(Fragment, null, renderList(annotationMarks.value, (a) => {
1299
+ return openBlock(), createElementBlock("g", {
1300
+ key: `a-${a.key}`
1301
+ }, [
1302
+ createElementVNode("circle", {
1303
+ cx: a.x,
1304
+ cy: a.y,
1305
+ r: "3.5",
1306
+ fill: a.color,
1307
+ stroke: "var(--color-surface)",
1308
+ "stroke-width": "1.5"
1309
+ }, null, 8, _hoisted_45),
1310
+ createElementVNode("text", {
1311
+ x: a.anchor === "end" ? a.x - 6 : a.x + 6,
1312
+ y: a.y - 6,
1313
+ "text-anchor": a.anchor,
1314
+ class: "text-[10px]",
1315
+ fill: a.color
1316
+ }, toDisplayString(a.label), 9, _hoisted_46)
1103
1317
  ]);
1104
1318
  }), 128)),
1105
- active.value >= 0 && __props.type !== "bar" ? (openBlock(), createElementBlock("g", _hoisted_43, [
1319
+ selectionBox.value ? (openBlock(), createElementBlock("rect", {
1320
+ key: 3,
1321
+ "data-lp-chart-selection": "",
1322
+ x: selectionBox.value.x,
1323
+ y: box.value.top,
1324
+ width: selectionBox.value.width,
1325
+ height: unref(plotHeight)(box.value),
1326
+ fill: "var(--color-brand)",
1327
+ opacity: "0.15"
1328
+ }, null, 8, _hoisted_47)) : createCommentVNode("", true),
1329
+ crosshair.value >= 0 && __props.type !== "bar" ? (openBlock(), createElementBlock("g", _hoisted_48, [
1106
1330
  createElementVNode("line", {
1107
1331
  x1: activeX.value,
1108
1332
  x2: activeX.value,
@@ -1111,7 +1335,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1111
1335
  stroke: "var(--color-line-strong)",
1112
1336
  "stroke-width": "1",
1113
1337
  "stroke-dasharray": "3 3"
1114
- }, null, 8, _hoisted_44),
1338
+ }, null, 8, _hoisted_49),
1115
1339
  (openBlock(true), createElementBlock(Fragment, null, renderList(activePoints.value, (p) => {
1116
1340
  return openBlock(), createElementBlock("circle", {
1117
1341
  key: p.id,
@@ -1121,7 +1345,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1121
1345
  fill: p.color,
1122
1346
  stroke: "var(--color-surface)",
1123
1347
  "stroke-width": "2"
1124
- }, null, 8, _hoisted_45);
1348
+ }, null, 8, _hoisted_50);
1125
1349
  }), 128))
1126
1350
  ])) : createCommentVNode("", true),
1127
1351
  (openBlock(true), createElementBlock(Fragment, null, renderList(xLabels.value, (l) => {
@@ -1131,7 +1355,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1131
1355
  y: __props.height - 8,
1132
1356
  "text-anchor": "middle",
1133
1357
  class: normalizeClass(["fill-[var(--color-muted)] text-[10px]", active.value === l.i ? "fill-[var(--color-ink)]" : ""])
1134
- }, toDisplayString(l.label), 11, _hoisted_46)), [
1358
+ }, toDisplayString(l.label), 11, _hoisted_51)), [
1135
1359
  [vShow, __props.showXAxis]
1136
1360
  ]);
1137
1361
  }), 128))
@@ -1155,21 +1379,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1155
1379
  default: withCtx(() => [
1156
1380
  createVNode(_sfc_main$7, { axis: "both" }, {
1157
1381
  default: withCtx(() => [
1158
- createElementVNode("div", _hoisted_47, toDisplayString(labels.value[active.value]), 1),
1159
- createElementVNode("div", _hoisted_48, [
1382
+ createElementVNode("div", _hoisted_52, toDisplayString(labels.value[active.value]), 1),
1383
+ createElementVNode("div", _hoisted_53, [
1160
1384
  (openBlock(true), createElementBlock(Fragment, null, renderList(tooltipRows.value, (r) => {
1161
1385
  return openBlock(), createElementBlock("div", {
1162
1386
  key: r.id,
1163
1387
  class: "flex items-center justify-between gap-3 text-xs"
1164
1388
  }, [
1165
- createElementVNode("span", _hoisted_49, [
1389
+ createElementVNode("span", _hoisted_54, [
1166
1390
  createElementVNode("span", {
1167
1391
  class: "size-1.5 shrink-0 rounded-full",
1168
1392
  style: normalizeStyle({ backgroundColor: r.color })
1169
1393
  }, null, 4),
1170
1394
  createTextVNode(" " + toDisplayString(r.name), 1)
1171
1395
  ]),
1172
- createElementVNode("span", _hoisted_50, toDisplayString(r.text), 1)
1396
+ createElementVNode("span", _hoisted_55, toDisplayString(r.text), 1)
1173
1397
  ]);
1174
1398
  }), 128))
1175
1399
  ])
@@ -1179,18 +1403,35 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1179
1403
  ]),
1180
1404
  _: 1
1181
1405
  }, 8, ["class", "animate", "transition"])) : createCommentVNode("", true),
1182
- createElementVNode("span", _hoisted_51, toDisplayString(readout.value), 1)
1406
+ __props.zoomable && range.value && ready.value ? (openBlock(), createElementBlock("button", {
1407
+ key: 1,
1408
+ type: "button",
1409
+ class: "absolute right-1 top-1 rounded-inner bg-surface-raised px-2 py-0.5 text-[11px] text-muted-strong outline-none hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
1410
+ onClick: resetZoom
1411
+ }, toDisplayString(unref(strings).resetZoom), 1)) : createCommentVNode("", true),
1412
+ createElementVNode("span", _hoisted_56, toDisplayString(readout.value), 1)
1183
1413
  ], 44, _hoisted_10)
1184
1414
  ]),
1185
1415
  _: 3
1186
1416
  }, 8, ["items", "always"]),
1187
- __props.dataTable && ready.value ? (openBlock(), createElementBlock("div", _hoisted_52, [
1417
+ __props.rangeSelector && ready.value && width.value > 0 ? (openBlock(), createBlock(_sfc_main$8, {
1418
+ key: 3,
1419
+ values: fullSeries.value.find((s) => s.values.some((v) => v != null))?.values ?? [],
1420
+ count: fullCount.value,
1421
+ range: range.value,
1422
+ width: width.value,
1423
+ labels: fullLabels.value,
1424
+ "start-label": unref(strings).rangeStart,
1425
+ "end-label": unref(strings).rangeEnd,
1426
+ onChange: setRange
1427
+ }, null, 8, ["values", "count", "range", "width", "labels", "start-label", "end-label"])) : createCommentVNode("", true),
1428
+ __props.dataTable && ready.value ? (openBlock(), createElementBlock("div", _hoisted_57, [
1188
1429
  createElementVNode("table", null, [
1189
- __props.title ? (openBlock(), createElementBlock("caption", _hoisted_53, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
1430
+ __props.title ? (openBlock(), createElementBlock("caption", _hoisted_58, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
1190
1431
  createElementVNode("thead", null, [
1191
1432
  createElementVNode("tr", null, [
1192
- _cache[0] || (_cache[0] = createElementVNode("th", { scope: "col" }, null, -1)),
1193
- (openBlock(true), createElementBlock(Fragment, null, renderList(allSeries.value, (s) => {
1433
+ _cache[1] || (_cache[1] = createElementVNode("th", { scope: "col" }, null, -1)),
1434
+ (openBlock(true), createElementBlock(Fragment, null, renderList(fullSeries.value, (s) => {
1194
1435
  return openBlock(), createElementBlock("th", {
1195
1436
  key: s.id,
1196
1437
  scope: "col"
@@ -1199,10 +1440,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1199
1440
  ])
1200
1441
  ]),
1201
1442
  createElementVNode("tbody", null, [
1202
- (openBlock(true), createElementBlock(Fragment, null, renderList(labels.value, (label, i) => {
1443
+ (openBlock(true), createElementBlock(Fragment, null, renderList(fullLabels.value, (label, i) => {
1203
1444
  return openBlock(), createElementBlock("tr", { key: i }, [
1204
- createElementVNode("th", _hoisted_54, toDisplayString(label), 1),
1205
- (openBlock(true), createElementBlock(Fragment, null, renderList(allSeries.value, (s) => {
1445
+ createElementVNode("th", _hoisted_59, toDisplayString(label), 1),
1446
+ (openBlock(true), createElementBlock(Fragment, null, renderList(fullSeries.value, (s) => {
1206
1447
  return openBlock(), createElementBlock("td", {
1207
1448
  key: s.id
1208
1449
  }, toDisplayString(s.values[i] == null ? "—" : fmtSeries(s, s.values[i])), 1);
@@ -1216,7 +1457,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1216
1457
  };
1217
1458
  }
1218
1459
  });
1219
- const LpChart = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-21ad716e"]]);
1460
+ const LpChart = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-39ed90d7"]]);
1220
1461
  export {
1221
1462
  LpChart as default
1222
1463
  };