@leavepulse/ui 0.77.3 → 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-E8KtwU7-.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-C-SpPfBG.js → LpAutocomplete-DkY6CSyD.js} +24 -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 +13 -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
@@ -43,6 +43,7 @@ import { prefersReducedMotion } from "../composables/easing"
43
43
  import { useMergedAttrs } from "../composables/useMergedClass"
44
44
  import { springSettled, springStep, type SpringState } from "../composables/usePillTransition"
45
45
  import { useRovingFocus } from "../composables/useRovingFocus"
46
+ import { isHTMLElement } from "../composables/useView"
46
47
  import { dockSize } from "./dock"
47
48
  import LpIcon from "./LpIcon.vue"
48
49
  import LpTooltip from "./LpTooltip.vue"
@@ -96,7 +97,7 @@ function select(id: string) {
96
97
 
97
98
  const roving = useRovingFocus(
98
99
  () => props.items.map((item) => ({ id: item.id, label: item.label, disabled: item.disabled })),
99
- { orientation: props.orientation, onActivate: select },
100
+ { orientation: () => props.orientation, onActivate: select },
100
101
  )
101
102
 
102
103
  // ── magnification ─────────────────────────────────────────
@@ -111,7 +112,7 @@ let frame = 0
111
112
  let lastTime = 0
112
113
 
113
114
  function setButton(id: string, el: unknown) {
114
- if (el instanceof HTMLElement) buttons.set(id, el)
115
+ if (isHTMLElement(el)) buttons.set(id, el)
115
116
  else buttons.delete(id)
116
117
  }
117
118
 
@@ -120,9 +121,21 @@ function centreOf(el: HTMLElement): number {
120
121
  return vertical.value ? rect.top + rect.height / 2 : rect.left + rect.width / 2
121
122
  }
122
123
 
123
- function targetFor(el: HTMLElement): number {
124
- if (pointer === null) return props.size
125
- return dockSize(props.size, Math.max(props.size, props.magnify), pointer - centreOf(el), props.reach)
124
+ /*
125
+ * `focusAt` stays relative to the bar and is read here: stored as client px it
126
+ * went stale as soon as the bar scrolled, while the icons it is measured
127
+ * against moved on.
128
+ */
129
+ function swellCentre(): number | null {
130
+ if (props.focusAt === null) return pointer
131
+ if (!bar.value || !magnifying()) return null
132
+ const rect = bar.value.getBoundingClientRect()
133
+ return (vertical.value ? rect.top : rect.left) + props.focusAt
134
+ }
135
+
136
+ function targetFor(el: HTMLElement, centre: number | null): number {
137
+ if (centre === null) return props.size
138
+ return dockSize(props.size, Math.max(props.size, props.magnify), centre - centreOf(el), props.reach)
126
139
  }
127
140
 
128
141
  function step(time: number) {
@@ -133,7 +146,8 @@ function step(time: number) {
133
146
  // Read every target before writing any size: interleaving reads and writes
134
147
  // would force a layout per icon per frame.
135
148
  const targets = new Map<string, number>()
136
- for (const [id, el] of buttons) targets.set(id, targetFor(el))
149
+ const centre = swellCentre()
150
+ for (const [id, el] of buttons) targets.set(id, targetFor(el, centre))
137
151
  for (const [id, el] of buttons) {
138
152
  const target = targets.get(id)!
139
153
  const next = springStep(springs.get(id) ?? { value: props.size, velocity: 0 }, target, "pill", dt)
@@ -180,17 +194,12 @@ function onFocusOut(event: FocusEvent) {
180
194
  kick()
181
195
  }
182
196
 
183
- // The outside-driven swell: converted from bar-relative to client px on every
184
- // frame it is set, so a bar that moves (scrolls) keeps the swell in place.
197
+ // A coordinate along the old axis means nothing along the new one, so the
198
+ // swell rests until the pointer moves again.
185
199
  watch(
186
- () => props.focusAt,
187
- (at) => {
188
- if (at === null) {
189
- pointer = null
190
- } else if (bar.value && magnifying()) {
191
- const rect = bar.value.getBoundingClientRect()
192
- pointer = (vertical.value ? rect.top : rect.left) + at
193
- }
200
+ [() => props.focusAt, vertical],
201
+ () => {
202
+ pointer = null
194
203
  kick()
195
204
  },
196
205
  { flush: "post" },
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import { clamp } from "../composables/clamp"
2
3
  import { ref as sharedRef, type Ref } from "vue"
3
4
 
4
5
  // One pull at a time across every edge-open drawer on the page, pinned to a
@@ -37,13 +38,14 @@ import { CLOSE_ICON } from "./dropdown"
37
38
  import { prefersReducedMotion } from "../composables/easing"
38
39
  import { useCloseGuard, type CloseGuard } from "../composables/useCloseGuard"
39
40
  import { useGlass } from "../composables/useGlass"
40
- import { useOverlayHistory, type OverlayHistoryMode } from "../composables/useOverlayHistory"
41
+ import { useModelOverlayHistory, type OverlayHistoryMode } from "../composables/useOverlayHistory"
41
42
  import { useLabels } from "../composables/useLpConfig"
42
43
  import { usePersisted } from "../composables/usePersisted"
43
44
  import LpIcon from "./LpIcon.vue"
44
45
  import LpScrollArea from "./LpScrollArea.vue"
45
46
  import { anyModalOpen, useModalLayer } from "./modalDepth"
46
- import { useOutsideGuard, usePortalTarget } from "../composables/useView"
47
+ import { startPointerDrag } from "../composables/pointerDrag"
48
+ import { isElement, nodeWindow, useOutsideGuard, usePortalTarget, useView, viewDocument, viewWindow } from "../composables/useView"
47
49
 
48
50
  type Direction = "top" | "bottom" | "left" | "right"
49
51
 
@@ -223,16 +225,11 @@ async function requestClose() {
223
225
  // ways out do. Handed to the body and footer slots, and exposed.
224
226
  defineExpose({ close: requestClose })
225
227
 
226
- useOverlayHistory({
228
+ useModelOverlayHistory({
227
229
  mode: () => props.history,
228
230
  open: () => !!props.open,
229
- close: async () => {
230
- if (!(await allowClose())) return false
231
- emit("update:open", false)
232
- return true
233
- },
234
- reopen: () => emit("update:open", true),
235
- navigated: () => emit("update:open", false),
231
+ setOpen: (open) => emit("update:open", open),
232
+ allowClose,
236
233
  })
237
234
 
238
235
  // The header's close button is vaul's own and would slide the panel away at
@@ -255,22 +252,26 @@ const sizeStyle = computed(() => {
255
252
  if (props.snapPoints?.length && isSheet.value) return undefined
256
253
  // A live resize wins over the preset/width.
257
254
  if (props.resizable && isHorizontal.value && resizedPx.value != null) {
258
- return { width: `${resizedPx.value}px` }
255
+ // Capped live: a width dragged or remembered on a wide window must still
256
+ // fit once the window shrinks or the device turns.
257
+ return { width: `min(${resizedPx.value}px, ${props.maxSize})` }
259
258
  }
260
259
  const len = props.width ?? `min(${isHorizontal.value ? "94vw" : "94vh"}, ${SIZES[props.size]}rem)`
261
260
  return isHorizontal.value ? { width: len } : { height: len }
262
261
  })
263
262
 
264
- // Resolve a CSS length to px against the viewport. Anything it cannot read
265
- // (calc(), min()) comes back NaN for the caller to fall back on.
266
- function toPx(css: string): number {
263
+ // Resolve a CSS length to px against the viewport. Only px, rem, vw and vh are
264
+ // read; anything else (calc(), min()) comes back NaN and the caller falls back
265
+ // to the viewport, while the CSS itself still applies the length as written.
266
+ function toPx(css: string, win?: Window): number {
267
267
  const n = Number.parseFloat(css)
268
268
  if (css.endsWith("rem")) {
269
- const root = typeof document === "undefined" ? 16 : Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16
269
+ const view = win ?? (typeof window === "undefined" ? null : window)
270
+ const root = view ? Number.parseFloat(view.getComputedStyle(view.document.documentElement).fontSize) || 16 : 16
270
271
  return n * root
271
272
  }
272
- if (css.endsWith("vw")) return (n / 100) * window.innerWidth
273
- if (css.endsWith("vh")) return (n / 100) * window.innerHeight
273
+ if (css.endsWith("vw")) return (n / 100) * (win ?? window).innerWidth
274
+ if (css.endsWith("vh")) return (n / 100) * (win ?? window).innerHeight
274
275
  if (css.endsWith("px") || /^[\d.]+$/.test(css.trim())) return n
275
276
  return Number.NaN
276
277
  }
@@ -283,34 +284,22 @@ let endResize: (() => void) | null = null
283
284
 
284
285
  function startResize(e: PointerEvent) {
285
286
  if (!props.resizable || !isHorizontal.value) return
286
- e.preventDefault()
287
287
  endResize?.()
288
- const grip = e.currentTarget instanceof HTMLElement ? e.currentTarget : null
289
- grip?.setPointerCapture(e.pointerId)
288
+ // The window the panel lives in: an LpFrame's, inside one.
289
+ const win = nodeWindow(e.currentTarget as Node)
290
290
  const fromRight = dir.value === "right"
291
- const min = toPx(props.minSize)
292
- const max = toPx(props.maxSize)
293
- const onMove = (ev: PointerEvent) => {
294
- if (ev.pointerId !== e.pointerId) return
295
- const raw = fromRight ? window.innerWidth - ev.clientX : ev.clientX
296
- resizedPx.value = Math.max(Number.isNaN(min) ? 0 : min, Math.min(Number.isNaN(max) ? Infinity : max, raw))
297
- }
298
- const end = () => {
299
- window.removeEventListener("pointermove", onMove)
300
- window.removeEventListener("pointerup", end)
301
- window.removeEventListener("pointercancel", end)
302
- grip?.removeEventListener("lostpointercapture", end)
303
- document.body.style.userSelect = ""
304
- document.body.style.cursor = ""
305
- endResize = null
306
- }
307
- endResize = end
308
- document.body.style.userSelect = "none"
309
- document.body.style.cursor = "ew-resize"
310
- window.addEventListener("pointermove", onMove)
311
- window.addEventListener("pointerup", end)
312
- window.addEventListener("pointercancel", end)
313
- grip?.addEventListener("lostpointercapture", end)
291
+ const min = toPx(props.minSize, win)
292
+ const max = toPx(props.maxSize, win)
293
+ endResize = startPointerDrag(e, {
294
+ cursor: "ew-resize",
295
+ move(ev) {
296
+ const raw = fromRight ? win.innerWidth - ev.clientX : ev.clientX
297
+ resizedPx.value = Math.max(Number.isNaN(min) ? 0 : min, Math.min(Number.isNaN(max) ? win.innerWidth : Math.min(max, win.innerWidth), raw))
298
+ },
299
+ end() {
300
+ endResize = null
301
+ },
302
+ })
314
303
  }
315
304
 
316
305
  onBeforeUnmount(() => endResize?.())
@@ -380,22 +369,30 @@ const skipOpenSlide = ref(false)
380
369
  watch(
381
370
  () => props.open,
382
371
  (open) => {
383
- if (!open) skipOpenSlide.value = false
372
+ if (open) return
373
+ skipOpenSlide.value = false
374
+ // Closing mid-resize removes the grip, which takes its capture events along.
375
+ endResize?.()
384
376
  },
385
377
  )
386
378
 
387
379
  // Resolve the panel's main-axis size in px to map drag distance → progress.
388
380
  function panelPx(): number {
389
- const vw = typeof window === "undefined" ? 0 : window.innerWidth
381
+ const vw = typeof window === "undefined" ? 0 : edgeWindow().innerWidth
390
382
  const preset = toPx(`${SIZES[props.size]}rem`)
391
- const cap = props.width ? toPx(props.width) : preset
383
+ const resized = props.resizable ? resizedPx.value : null
384
+ const cap = resized ?? (props.width ? toPx(props.width) : preset)
392
385
  return Math.min(vw * 0.94, Number.isFinite(cap) ? cap : preset)
393
386
  }
394
387
 
388
+ // The window the drawer renders in (an LpFrame's, inside one).
389
+ const view = useView()
390
+ const edgeWindow = () => viewWindow(view.value)
391
+
395
392
  function edgeEnabled(): boolean {
396
393
  if (!props.edgeOpen || !isHorizontal.value || props.open || handingOff.value) return false
397
394
  const bp = props.edgeBreakpoint ? BREAKPOINT_PX[props.edgeBreakpoint] : null
398
- return bp === null || window.innerWidth < bp
395
+ return bp === null || edgeWindow().innerWidth < bp
399
396
  }
400
397
 
401
398
  let track: { id: number; x: number; y: number; t: number; lastX: number; lastT: number; speed: number } | null = null
@@ -405,12 +402,13 @@ const owner = Symbol("edge-pull")
405
402
  // pulls (a carousel, a wide table) keeps the gesture: the pull only claims
406
403
  // what nothing under the finger wants.
407
404
  function scrollsWithPull(target: EventTarget | null): boolean {
408
- let el = target instanceof Element ? target : null
405
+ let el = isElement(target) ? target : null
409
406
  const pullsRight = dir.value === "left"
410
- while (el && el !== document.body) {
407
+ const body = el?.ownerDocument.body
408
+ while (el && el !== body) {
411
409
  if (el.closest(EDGE_IGNORE) === el) return true
412
410
  if (el.scrollWidth > el.clientWidth) {
413
- const overflow = getComputedStyle(el).overflowX
411
+ const overflow = nodeWindow(el).getComputedStyle(el).overflowX
414
412
  if (overflow === "auto" || overflow === "scroll") {
415
413
  if (pullsRight ? el.scrollLeft > 0 : el.scrollLeft + el.clientWidth < el.scrollWidth) return true
416
414
  }
@@ -421,7 +419,7 @@ function scrollsWithPull(target: EventTarget | null): boolean {
421
419
  }
422
420
 
423
421
  function inward(x: number): number {
424
- return dir.value === "right" ? window.innerWidth - x : x
422
+ return dir.value === "right" ? edgeWindow().innerWidth - x : x
425
423
  }
426
424
 
427
425
  function onTouchStart(e: TouchEvent) {
@@ -457,7 +455,7 @@ function onTouchMove(e: TouchEvent) {
457
455
  if (dt > 0) track.speed = (((t.clientX - track.lastX) * sign) / dt) * 0.6 + track.speed * 0.4
458
456
  track.lastX = t.clientX
459
457
  track.lastT = e.timeStamp
460
- peek.value = Math.max(0, Math.min(1, inward(t.clientX) / panelPx()))
458
+ peek.value = clamp(inward(t.clientX) / panelPx(), 0, 1)
461
459
  }
462
460
 
463
461
  function dropTrack() {
@@ -465,6 +463,15 @@ function dropTrack() {
465
463
  if (edgeOwner.value === owner) edgeOwner.value = null
466
464
  }
467
465
 
466
+ // The system took the touch (a gesture, a dialog): the pull did not finish, so
467
+ // it never opens the drawer, however far it had come.
468
+ function cancelPull() {
469
+ if (!track) return
470
+ dropTrack()
471
+ peeking.value = false
472
+ peek.value = 0
473
+ }
474
+
468
475
  function settle() {
469
476
  const flick = track !== null && track.speed > FLICK_SPEED && peek.value > 0.05
470
477
  dropTrack()
@@ -503,19 +510,21 @@ function onTouchEnd(e: TouchEvent) {
503
510
 
504
511
  if (typeof document !== "undefined") {
505
512
  watch(
506
- () => props.edgeOpen && isHorizontal.value,
513
+ () => (props.edgeOpen && isHorizontal.value ? viewDocument(view.value) : null),
507
514
  (on, _, onCleanup) => {
508
515
  if (!on) return
516
+ const doc = viewDocument(view.value)
509
517
  const passive = { passive: true }
510
- document.addEventListener("touchstart", onTouchStart, passive)
511
- document.addEventListener("touchmove", onTouchMove, { passive: false })
512
- document.addEventListener("touchend", onTouchEnd, passive)
513
- document.addEventListener("touchcancel", onTouchEnd, passive)
518
+ doc.addEventListener("touchstart", onTouchStart, passive)
519
+ doc.addEventListener("touchmove", onTouchMove, { passive: false })
520
+ doc.addEventListener("touchend", onTouchEnd, passive)
521
+ doc.addEventListener("touchcancel", cancelPull, passive)
514
522
  onCleanup(() => {
515
- document.removeEventListener("touchstart", onTouchStart)
516
- document.removeEventListener("touchmove", onTouchMove)
517
- document.removeEventListener("touchend", onTouchEnd)
518
- document.removeEventListener("touchcancel", onTouchEnd)
523
+ doc.removeEventListener("touchstart", onTouchStart)
524
+ doc.removeEventListener("touchmove", onTouchMove)
525
+ doc.removeEventListener("touchend", onTouchEnd)
526
+ doc.removeEventListener("touchcancel", cancelPull)
527
+ cancelPull()
519
528
  })
520
529
  },
521
530
  { immediate: true },
@@ -1,7 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { useId } from "vue"
3
- import { menuPaletteCommands } from "./commandPalette"
4
- import { usePaletteCommands, usePaletteScope, type PaletteControlOptions } from "../composables/usePaletteCommands"
2
+ import { useMenuPalette, type PaletteControlOptions } from "../composables/usePaletteCommands"
5
3
  /*
6
4
  * A menu opened from a button (usually a row's "…"). Its items are the same
7
5
  * shape as LpContextMenu's and are drawn by the same renderer, so one array
@@ -36,6 +34,9 @@ const props = withDefaults(defineProps<{
36
34
  }>(), { palette: undefined })
37
35
 
38
36
  const PANEL = `${POPOVER_PANEL} z-(--z-popover) min-w-44 p-1 outline-none`
37
+ // reka names the menu after its trigger, and aria-labelledby beats aria-label:
38
+ // a `title` only names the menu with that link taken off. MenuTitle itself is
39
+ // hidden from assistive tech, so nothing is announced twice.
39
40
 
40
41
  function opened(open: boolean) {
41
42
  if (open && props.rightClickToo) hints.use(HINT_SIGNALS.menuButton)
@@ -47,12 +48,7 @@ const portalTo = usePortalTarget()
47
48
  // the page) is not "outside" for this layer.
48
49
  const guardOutside = useOutsideGuard()
49
50
 
50
- const paletteScope = usePaletteScope()
51
- const paletteId = useId()
52
- usePaletteCommands(() => props.palette === false || !props.title || !props.items.length ? [] : [{
53
- id: `${paletteScope?.id}/${props.palette?.id ?? paletteId}`, label: props.palette?.label ?? props.title,
54
- children: menuPaletteCommands(props.items, `${paletteScope?.id}/${props.palette?.id ?? paletteId}`),
55
- }], { automatic: true })
51
+ useMenuPalette(props)
56
52
  </script>
57
53
 
58
54
  <template>
@@ -68,7 +64,7 @@ usePaletteCommands(() => props.palette === false || !props.title || !props.items
68
64
  :side-offset="6"
69
65
  align="end"
70
66
  :class="PANEL"
71
- :aria-label="title"
67
+ v-bind="title ? { 'aria-label': title, 'aria-labelledby': undefined } : {}"
72
68
  >
73
69
  <MenuTitle v-if="title" :title="title" :subtitle="subtitle" :icon="titleIcon" :image="titleImage" />
74
70
  <ContextMenuItems :items="items" :panel="PANEL" kind="dropdown" />
@@ -6,6 +6,7 @@ export default { inheritAttrs: false }
6
6
  </script>
7
7
 
8
8
  <script setup lang="ts">
9
+ import { isElement, nodeWindow } from "../composables/realm"
9
10
  /*
10
11
  * A place to put files: drop them, click to browse, or paste from the
11
12
  * clipboard.
@@ -43,7 +44,9 @@ import { PopoverAnchor, PopoverContent, PopoverPortal, PopoverRoot } from "reka-
43
44
  import DropzoneLinkField from "./DropzoneLinkField.vue"
44
45
  import { POPOVER_PANEL } from "./dropdown"
45
46
  import LpIcon from "./LpIcon.vue"
46
- import { useOutsideGuard, usePortalTarget } from "../composables/useView"
47
+ import { inTextField } from "../composables/textEntry"
48
+ import { useOutsideGuard, usePortalTarget, useView, viewWindow } from "../composables/useView"
49
+
47
50
 
48
51
  const props = withDefaults(
49
52
  defineProps<{
@@ -378,7 +381,7 @@ function onPicked(event: Event) {
378
381
  if (el.files?.length) {
379
382
  hints.use(HINT_SIGNALS.dropzoneBrowse)
380
383
  const zone = revealAnchor.value
381
- if (zone instanceof Element) noteDropzone(zone)
384
+ if (isElement(zone)) noteDropzone(zone)
382
385
  }
383
386
  take(el.files)
384
387
  // Cleared so picking the same file twice in a row fires again — otherwise
@@ -389,18 +392,20 @@ function onPicked(event: Event) {
389
392
  function windowPaste(event: ClipboardEvent) {
390
393
  // Already taken by the zone itself, which the paste bubbled up from.
391
394
  if (props.disabled || event.defaultPrevented) return
392
- const target = event.target as HTMLElement | null
393
395
  // A paste aimed at somewhere you can type belongs to that thing.
394
- if (target?.closest("input, textarea, [contenteditable]")) return
396
+ if (inTextField(event.target)) return
395
397
  onPaste(event)
396
398
  }
397
399
 
400
+ const view = useView()
398
401
  let listening = false
399
402
  function listen(on: boolean) {
400
403
  if (on === listening || typeof window === "undefined") return
401
404
  listening = on
402
- if (on) window.addEventListener("paste", windowPaste)
403
- else window.removeEventListener("paste", windowPaste)
405
+ // A paste stays in the document it happened in: inside an LpFrame, that one.
406
+ const win = viewWindow(view.value)
407
+ if (on) win.addEventListener("paste", windowPaste)
408
+ else win.removeEventListener("paste", windowPaste)
404
409
  }
405
410
  let mounted = false
406
411
  onMounted(() => {
@@ -443,7 +448,7 @@ const frameRadius = computed(() =>
443
448
  )
444
449
  function measureRadius() {
445
450
  const zone = revealAnchor.value as HTMLElement | null
446
- if (zone) measuredRadius.value = getComputedStyle(zone).borderTopLeftRadius
451
+ if (zone) measuredRadius.value = nodeWindow(zone).getComputedStyle(zone).borderTopLeftRadius
447
452
  }
448
453
  watch(rootClass, () => nextTick(measureRadius))
449
454
 
@@ -36,6 +36,7 @@ import { computed, nextTick, ref, watch } from "vue"
36
36
  import { useFieldNotice } from "../composables/useFieldNotice"
37
37
  import { useLabels } from "../composables/useLpConfig"
38
38
  import { useMergedAttrs } from "../composables/useMergedClass"
39
+ import { useView, viewDocument } from "../composables/useView"
39
40
  import LpFieldNotice from "./LpFieldNotice.vue"
40
41
  import LpIcon from "./LpIcon.vue"
41
42
  import LpLoader from "./LpLoader.vue"
@@ -75,6 +76,8 @@ const props = withDefaults(
75
76
  { modelValue: "", trim: true, size: "md" },
76
77
  )
77
78
 
79
+ const view = useView()
80
+
78
81
  const emit = defineEmits<{
79
82
  (e: "update:modelValue", value: string): void
80
83
  /** Editing opened. */
@@ -157,8 +160,9 @@ async function commit(refocus: boolean) {
157
160
  editing.value = true
158
161
  await nextTick()
159
162
  // Back into the field only if focus is not already somewhere else.
160
- const active = document.activeElement
161
- if (!active || active === document.body || active === idle.value) field.value?.focus({ preventScroll: true })
163
+ const page = viewDocument(view.value)
164
+ const active = page.activeElement
165
+ if (!active || active === page.body || active === idle.value) field.value?.focus({ preventScroll: true })
162
166
  notice.show(error instanceof Error && error.message ? error.message : text.value.failed, { tone: "danger" })
163
167
  } finally {
164
168
  pending.value = null