@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
package/README.md CHANGED
@@ -130,6 +130,30 @@ again, nothing remounts). A Forward onto a kit entry still reaches it that
130
130
  way, because the entry it starts from belongs to the router. Plain
131
131
  `pushState` and `popstate` only, so WebKit (Safari, WebKitGTK) works too.
132
132
 
133
+ ### Module format
134
+
135
+ The package is ESM only: `require("@leavepulse/ui")` is not supported. Import
136
+ from the package root; `@leavepulse/ui/dist/*.js` also resolves, for a tool
137
+ that needs one file (the Nuxt module does), and covers `components`,
138
+ `composables`, `layout` and `theme`.
139
+
140
+ ### Catching a misspelt prop
141
+
142
+ A prop a component does not declare falls through as an attribute with no
143
+ error, so `<LpTooltip text="...">` renders with no tip. `lpPropCheck` warns in
144
+ development, and knows `data-*`, `aria-*` and anything the rendered element
145
+ takes. The Nuxt module installs it in `nuxt dev` (`propCheck: false` turns it off).
146
+
147
+ ```ts
148
+ import { lpPropCheck } from "@leavepulse/ui"
149
+ if (import.meta.env.DEV) app.use(lpPropCheck, { ignore: [/^x-/] })
150
+ ```
151
+
152
+ vue-tsc also skips unknown props by default. `vueCompilerOptions.checkUnknownProps`
153
+ in the app's tsconfig turns that on, but it also reports attributes passed
154
+ through on purpose (`id`, `title`, `aria-*`), so it suits a one-off sweep better
155
+ than a standing gate.
156
+
133
157
  ### Nuxt
134
158
 
135
159
  ```ts
@@ -231,6 +255,46 @@ bun run dev:dist # rebuild dist on change (for a linked consumer)
231
255
  `release:minor`) bumps the version and pushes the tag; CI tests, builds and
232
256
  publishes it.
233
257
 
258
+ ### Linked views
259
+
260
+ A monitoring screen shares one selection, one stretch of time and one followed
261
+ trace. `provideLinkedView()` holds them, and each `link*` binder turns them into
262
+ the props and listeners of a component it already has, for `v-bind`:
263
+
264
+ ```ts
265
+ const view = provideLinkedView()
266
+ const canvas = ref()
267
+ const table = linkTable(view, { kind: "server" })
268
+ const graph = linkTopology(view, canvas, { kind: "server" })
269
+ const log = linkLog(view, { kind: "server" })
270
+ const chart = linkChart(view, { times })
271
+ const pipeline = linkPipeline(view, { kind: "deployment", steps })
272
+ ```
273
+
274
+ Picking a row focuses the node and filters the log to its source; a picked log
275
+ line becomes a chart annotation; a clicked trace id fills the log search; the
276
+ chart's window is the time range the log shows; selecting a deployment opens its
277
+ failed steps. A binder with a `kind` answers only to that kind. The log needs
278
+ `selectable` and `link-ids`, a chart `zoomable` or `range-selector` to change
279
+ the range. `useLinkedView()` reads the view from a child; with none provided it
280
+ is private to that panel. The table link holds one row at a time.
281
+
282
+ ### Workspaces, inspector and windows
283
+
284
+ `useWorkspaces` keeps several named layouts over one `useLayout`; bind
285
+ `spaces.controller.layout` to `LayoutCanvas` as usual. Edits save to the active
286
+ workspace on their own, and `persist` keeps them across visits. A switch clears
287
+ undo: history belongs to one workspace. `LpWorkspaceSwitcher` is the menu for it.
288
+
289
+ `LpInspector` is the panel beside a table or graph for the selected thing:
290
+ `sections` of facts, `#section-<key>` for editing fields, `#empty` with nothing
291
+ selected. It sits in the layout. On a phone, put it in an `LpDrawer`.
292
+
293
+ `LpWindow` is a floating panel the page keeps working under: move, resize, dock
294
+ on a screen edge, snap to other windows, `persist` for its place. It stays out
295
+ of the modal stack and under dropdowns; it is not a window manager (no
296
+ minimising, no taskbar).
297
+
234
298
  ### Repeatable form rows
235
299
 
236
300
  `LpRepeater` supplies add/remove controls and stable row identity. Its slot owns
@@ -268,6 +332,10 @@ objects are edited, reordered or removed. The slot also provides `index`,
268
332
  disabled/read-only state, and can be combined with the `trailing` slot. Its
269
333
  button text comes from `labels.clear` or the app-wide `input` label scope.
270
334
 
335
+ ### Staying in the right window
336
+
337
+ `tests/realmGuard.test.ts` fails on `instanceof Element`, a bare `new ResizeObserver`, `getComputedStyle` or `document.activeElement`: inside an LpFrame those are another realm's. Use `composables/realm.ts`.
338
+
271
339
  ### Browser regression tests
272
340
 
273
341
  ```sh
@@ -5,34 +5,34 @@
5
5
  * pane from its right edge as it grows. Animating the columns themselves made
6
6
  * every line of the list and the pane re-wrap on every frame.
7
7
  */
8
- .lp-cmd-dialog[data-v-2880ef37] {
8
+ .lp-cmd-dialog[data-v-04518689] {
9
9
  --lp-cmd-list: min(92vw, 40rem);
10
10
  --lp-cmd-pane: max(0px, min(26rem, 96vw - var(--lp-cmd-list)));
11
11
  width: var(--lp-cmd-list);
12
12
  }
13
- .lp-cmd-split[data-v-2880ef37] {
13
+ .lp-cmd-split[data-v-04518689] {
14
14
  transition:
15
15
  width 300ms var(--ease-emphasized, ease),
16
16
  min-height 300ms var(--ease-emphasized, ease);
17
17
  }
18
18
  @media (min-width: 768px) {
19
- .lp-cmd-split .lp-cmd-list[data-v-2880ef37] {
19
+ .lp-cmd-split .lp-cmd-list[data-v-04518689] {
20
20
  flex: 0 0 auto;
21
21
  /* the dialog's 1px border on each side */
22
22
  width: calc(var(--lp-cmd-list) - 2px);
23
23
  }
24
- .lp-cmd-dialog[data-pane="open"][data-v-2880ef37] {
24
+ .lp-cmd-dialog[data-pane="open"][data-v-04518689] {
25
25
  width: calc(var(--lp-cmd-list) + var(--lp-cmd-pane));
26
26
  min-height: min(76vh, 36rem);
27
27
  }
28
28
  }
29
- .lp-cmd-pane[data-v-2880ef37] {
29
+ .lp-cmd-pane[data-v-04518689] {
30
30
  width: var(--lp-cmd-pane);
31
31
  }
32
- .lp-cmd-dialog[data-editing] .lp-cmd-pane[data-v-2880ef37] {
32
+ .lp-cmd-dialog[data-editing] .lp-cmd-pane[data-v-04518689] {
33
33
  width: 100%;
34
34
  }
35
- .lp-cmd-dialog[data-editing][data-v-2880ef37] {
35
+ .lp-cmd-dialog[data-editing][data-v-04518689] {
36
36
  width: var(--lp-cmd-list);
37
37
  min-height: 0;
38
38
  }
@@ -40,43 +40,43 @@
40
40
  * The pane rides in from the right edge while the dialog opens up to it, and
41
41
  * leaves the same way, for as long as the dialog takes to close over it.
42
42
  */
43
- .lp-cmd-pane-enter-active[data-v-2880ef37],
44
- .lp-cmd-pane-leave-active[data-v-2880ef37] {
43
+ .lp-cmd-pane-enter-active[data-v-04518689],
44
+ .lp-cmd-pane-leave-active[data-v-04518689] {
45
45
  transition:
46
46
  transform 300ms var(--ease-emphasized, ease),
47
47
  opacity 300ms ease;
48
48
  }
49
- .lp-cmd-pane-enter-from[data-v-2880ef37],
50
- .lp-cmd-pane-leave-to[data-v-2880ef37] {
49
+ .lp-cmd-pane-enter-from[data-v-04518689],
50
+ .lp-cmd-pane-leave-to[data-v-04518689] {
51
51
  opacity: 0;
52
52
  transform: translateX(40%);
53
53
  }
54
- .lp-cmd-para[data-v-2880ef37] {
54
+ .lp-cmd-para[data-v-04518689] {
55
55
  --rise: 4px;
56
56
  animation: rise-in 260ms ease-out both;
57
57
  }
58
58
  @media (prefers-reduced-motion: reduce) {
59
- .lp-cmd-split[data-v-2880ef37],
60
- .lp-cmd-pane-enter-active[data-v-2880ef37],
61
- .lp-cmd-pane-leave-active[data-v-2880ef37] {
59
+ .lp-cmd-split[data-v-04518689],
60
+ .lp-cmd-pane-enter-active[data-v-04518689],
61
+ .lp-cmd-pane-leave-active[data-v-04518689] {
62
62
  transition: none;
63
63
  }
64
- .lp-cmd-para[data-v-2880ef37] {
64
+ .lp-cmd-para[data-v-04518689] {
65
65
  animation: none;
66
66
  }
67
67
  }
68
- .lp-cmd-excerpt[data-v-2880ef37] {
68
+ .lp-cmd-excerpt[data-v-04518689] {
69
69
  display: -webkit-box;
70
70
  -webkit-box-orient: vertical;
71
71
  overflow: hidden;
72
72
  }
73
73
  /* Each result eases in; honours reduced motion. */
74
- .lp-cmd-item[data-v-2880ef37] {
74
+ .lp-cmd-item[data-v-04518689] {
75
75
  --rise: 3px;
76
76
  animation: rise-in 140ms ease-out both;
77
77
  }
78
78
  @media (prefers-reduced-motion: reduce) {
79
- .lp-cmd-item[data-v-2880ef37] {
79
+ .lp-cmd-item[data-v-04518689] {
80
80
  animation: none;
81
81
  }
82
82
  }
@@ -2,16 +2,16 @@
2
2
  /* The bar keeps its rest thickness while icons swell: they grow out of it
3
3
  (upward, or to the right when vertical) instead of pushing the bar, and
4
4
  with it whatever sits next to the bar, around on every pointer move. */
5
- [data-orientation="horizontal"][data-v-0f41b35e] {
5
+ [data-orientation="horizontal"][data-v-60ed6f1d] {
6
6
  height: calc(var(--lp-dock-rest) + 0.75rem + 2px);
7
7
  }
8
- [data-orientation="vertical"][data-v-0f41b35e] {
8
+ [data-orientation="vertical"][data-v-60ed6f1d] {
9
9
  width: calc(var(--lp-dock-rest) + 0.75rem + 2px);
10
10
  }
11
11
 
12
12
  /* Size is a custom property the spring writes per frame; the rest size is the
13
13
  fallback so the first paint (and touch, and reduced motion) needs no script. */
14
- .lp-dock-item[data-v-0f41b35e] {
14
+ .lp-dock-item[data-v-60ed6f1d] {
15
15
  width: var(--lp-dock-size, var(--lp-dock-rest));
16
16
  height: var(--lp-dock-size, var(--lp-dock-rest));
17
17
  }
@@ -1,9 +1,9 @@
1
1
 
2
- .lp-dropzone__frame rect[data-v-afb08dd3] {
2
+ .lp-dropzone__frame rect[data-v-d6722eb0] {
3
3
  stroke: var(--color-line);
4
4
  transition: stroke var(--duration-fast) linear;
5
5
  }
6
- .lp-dropzone:hover .lp-dropzone__frame rect[data-v-afb08dd3] {
6
+ .lp-dropzone:hover .lp-dropzone__frame rect[data-v-d6722eb0] {
7
7
  stroke: var(--color-line-strong);
8
8
  }
9
9
 
@@ -12,28 +12,28 @@
12
12
  with every other thing on it; under a drag it is the answer to "can I let go
13
13
  here". One dash period per cycle, so the travel is continuous rather than
14
14
  jumping back at the seam. */
15
- .lp-dropzone--over .lp-dropzone__frame rect[data-v-afb08dd3] {
15
+ .lp-dropzone--over .lp-dropzone__frame rect[data-v-d6722eb0] {
16
16
  stroke: var(--color-brand);
17
- animation: lp-dropzone-ants-afb08dd3 500ms linear infinite;
17
+ animation: lp-dropzone-ants-d6722eb0 500ms linear infinite;
18
18
  }
19
- @keyframes lp-dropzone-ants-afb08dd3 {
19
+ @keyframes lp-dropzone-ants-d6722eb0 {
20
20
  to {
21
21
  stroke-dashoffset: -11;
22
22
  }
23
23
  }
24
24
 
25
25
  /* The dashes fade in and the block settles up a few pixels. */
26
- .lp-dropzone[data-v-afb08dd3] {
26
+ .lp-dropzone[data-v-d6722eb0] {
27
27
  --rise: 6px;
28
28
  animation: rise-in var(--duration-slow) var(--ease-settle) both;
29
29
  }
30
- .lp-dropzone--waiting[data-v-afb08dd3] {
30
+ .lp-dropzone--waiting[data-v-d6722eb0] {
31
31
  opacity: 0;
32
32
  animation: none;
33
33
  }
34
34
  @media (prefers-reduced-motion: reduce) {
35
- .lp-dropzone[data-v-afb08dd3],
36
- .lp-dropzone--waiting[data-v-afb08dd3] {
35
+ .lp-dropzone[data-v-d6722eb0],
36
+ .lp-dropzone--waiting[data-v-d6722eb0] {
37
37
  opacity: 1;
38
38
  transform: none;
39
39
  animation: none;
@@ -41,7 +41,7 @@ to {
41
41
 
42
42
  /* The ants stop, the colour stays: the brand stroke is what says "drop
43
43
  here", and it says it standing still. */
44
- .lp-dropzone--over .lp-dropzone__frame rect[data-v-afb08dd3] {
44
+ .lp-dropzone--over .lp-dropzone__frame rect[data-v-d6722eb0] {
45
45
  animation: none;
46
46
  }
47
47
  }
@@ -2,22 +2,22 @@
2
2
  /* The picture settles into the frame instead of appearing in it. Scale rather
3
3
  than a slide: the frame is the fixed thing here and the image lives inside
4
4
  it, so anything that moved would read as a crop that had shifted. */
5
- .lp-editor__image[data-v-7eb4ac08] {
6
- animation: lp-editor-in-7eb4ac08 var(--duration-slow) var(--ease-settle) both;
5
+ .lp-editor__image[data-v-8895a6b2] {
6
+ animation: lp-editor-in-8895a6b2 var(--duration-slow) var(--ease-settle) both;
7
7
  }
8
- .lp-editor__image--waiting[data-v-7eb4ac08] {
8
+ .lp-editor__image--waiting[data-v-8895a6b2] {
9
9
  opacity: 0;
10
10
  animation: none;
11
11
  }
12
- @keyframes lp-editor-in-7eb4ac08 {
12
+ @keyframes lp-editor-in-8895a6b2 {
13
13
  from {
14
14
  opacity: 0;
15
15
  scale: 1.04;
16
16
  }
17
17
  }
18
18
  @media (prefers-reduced-motion: reduce) {
19
- .lp-editor__image[data-v-7eb4ac08],
20
- .lp-editor__image--waiting[data-v-7eb4ac08] {
19
+ .lp-editor__image[data-v-8895a6b2],
20
+ .lp-editor__image--waiting[data-v-8895a6b2] {
21
21
  opacity: 1;
22
22
  scale: 1;
23
23
  animation: none;
@@ -11,17 +11,17 @@
11
11
  * fade before closing the gap and the whole list lurches at the end instead of
12
12
  * gliding.
13
13
  */
14
- .lp-row-enter-active[data-v-d2bafc29],
15
- .lp-row-leave-active[data-v-d2bafc29] {
14
+ .lp-row-enter-active[data-v-48ad51fc],
15
+ .lp-row-leave-active[data-v-48ad51fc] {
16
16
  transition:
17
17
  opacity var(--duration-fast) var(--ease-emphasized),
18
18
  transform var(--duration-fast) var(--ease-emphasized);
19
19
  }
20
- .lp-row-move[data-v-d2bafc29] {
20
+ .lp-row-move[data-v-48ad51fc] {
21
21
  transition: transform var(--duration-medium) var(--ease-emphasized);
22
22
  }
23
- .lp-row-enter-from[data-v-d2bafc29],
24
- .lp-row-leave-to[data-v-d2bafc29] {
23
+ .lp-row-enter-from[data-v-48ad51fc],
24
+ .lp-row-leave-to[data-v-48ad51fc] {
25
25
  opacity: 0;
26
26
  transform: translateX(-0.5rem);
27
27
  }
@@ -35,7 +35,7 @@
35
35
  * drops out of the table layout entirely. Nothing sits below this row to be
36
36
  * dragged around, so simply not animating its exit costs nothing.
37
37
  */
38
- .lp-row-empty.lp-row-leave-active[data-v-d2bafc29] {
38
+ .lp-row-empty.lp-row-leave-active[data-v-48ad51fc] {
39
39
  display: none;
40
40
  }
41
41
 
@@ -54,7 +54,7 @@
54
54
  * once anything is selected. An earlier version collapsed the column to nothing
55
55
  * and floated the hover box over the first cell, where it sat on the text.
56
56
  */
57
- .lp-tick[data-v-d2bafc29] {
57
+ .lp-tick[data-v-48ad51fc] {
58
58
  display: flex;
59
59
  align-items: center;
60
60
  max-width: 0;
@@ -66,17 +66,17 @@
66
66
  padding var(--duration-medium) var(--ease-emphasized),
67
67
  opacity var(--duration-fast) ease;
68
68
  }
69
- .lp-tick-open[data-v-d2bafc29] {
69
+ .lp-tick-open[data-v-48ad51fc] {
70
70
  max-width: 3.25rem;
71
71
  padding-inline: 1rem;
72
72
  opacity: 1;
73
73
  }
74
- .lp-tick-hidden[data-v-d2bafc29],
75
- .lp-tick-cue[data-v-d2bafc29] {
74
+ .lp-tick-hidden[data-v-48ad51fc],
75
+ .lp-tick-cue[data-v-48ad51fc] {
76
76
  opacity: 0;
77
77
  }
78
- tr:hover .lp-tick-cue[data-v-d2bafc29],
79
- .lp-tick-cue[data-v-d2bafc29]:focus-within {
78
+ tr:hover .lp-tick-cue[data-v-48ad51fc],
79
+ .lp-tick-cue[data-v-48ad51fc]:focus-within {
80
80
  opacity: 1;
81
81
  }
82
82
 
@@ -84,24 +84,24 @@ tr:hover .lp-tick-cue[data-v-d2bafc29],
84
84
  turned down the rows change without animating rather than not changing. */
85
85
  /* Only where there is a hover to reveal it; a finger long-presses instead. */
86
86
  @media (hover: none) {
87
- tr:hover .lp-tick-cue[data-v-d2bafc29] {
87
+ tr:hover .lp-tick-cue[data-v-48ad51fc] {
88
88
  opacity: 0;
89
89
  }
90
90
 
91
91
  /* Nor is there anything for the column's width to hold until then: on a
92
92
  touch screen it stays closed until a long press starts selecting, and
93
93
  eases open like the rest of the column. */
94
- .lp-tick-hidden[data-v-d2bafc29],
95
- .lp-tick-cue[data-v-d2bafc29] {
94
+ .lp-tick-hidden[data-v-48ad51fc],
95
+ .lp-tick-cue[data-v-48ad51fc] {
96
96
  max-width: 0;
97
97
  padding-inline: 0;
98
98
  }
99
99
  }
100
100
  @media (prefers-reduced-motion: reduce) {
101
- .lp-row-enter-active[data-v-d2bafc29],
102
- .lp-row-leave-active[data-v-d2bafc29],
103
- .lp-row-move[data-v-d2bafc29],
104
- .lp-tick[data-v-d2bafc29] {
101
+ .lp-row-enter-active[data-v-48ad51fc],
102
+ .lp-row-leave-active[data-v-48ad51fc],
103
+ .lp-row-move[data-v-48ad51fc],
104
+ .lp-tick[data-v-48ad51fc] {
105
105
  transition: none;
106
106
  }
107
107
  }
@@ -0,0 +1,18 @@
1
+
2
+ .lp-tab-badge-enter-active[data-v-ef828291],
3
+ .lp-tab-badge-leave-active[data-v-ef828291] {
4
+ transition:
5
+ opacity var(--duration-fast) var(--ease-emphasized),
6
+ transform var(--duration-fast) var(--ease-emphasized);
7
+ }
8
+ .lp-tab-badge-enter-from[data-v-ef828291],
9
+ .lp-tab-badge-leave-to[data-v-ef828291] {
10
+ opacity: 0;
11
+ transform: scale(0.6);
12
+ }
13
+ @media (prefers-reduced-motion: reduce) {
14
+ .lp-tab-badge-enter-active[data-v-ef828291],
15
+ .lp-tab-badge-leave-active[data-v-ef828291] {
16
+ transition: none;
17
+ }
18
+ }
@@ -0,0 +1,49 @@
1
+ import { defineComponent, openBlock, createElementBlock, Fragment, renderList, createBlock, resolveDynamicComponent, mergeProps, withCtx, createTextVNode, toDisplayString } from "vue";
2
+ import { useLinkComponent } from "../composables/useLpConfig.js";
3
+ import { resolveLink } from "../components/link.js";
4
+ const _hoisted_1 = ["aria-label"];
5
+ const _sfc_main = /* @__PURE__ */ defineComponent({
6
+ __name: "AppShellContextNav",
7
+ props: {
8
+ items: {},
9
+ isActive: { type: Function },
10
+ label: {}
11
+ },
12
+ emits: ["select"],
13
+ setup(__props, { emit: __emit }) {
14
+ const props = __props;
15
+ const emit = __emit;
16
+ const linkComponent = useLinkComponent();
17
+ function rowOf(item) {
18
+ const link = item.disabled ? null : resolveLink(linkComponent.value, { to: item.to, href: item.href });
19
+ return link ?? { is: "button", props: { type: "button", disabled: item.disabled || void 0 } };
20
+ }
21
+ return (_ctx, _cache) => {
22
+ return openBlock(), createElementBlock("nav", {
23
+ "aria-label": props.label,
24
+ class: "flex shrink-0 gap-1 overflow-x-auto border-b border-line bg-surface px-4 py-1.5 lp-scrollbar-none"
25
+ }, [
26
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
27
+ return openBlock(), createBlock(resolveDynamicComponent(rowOf(item).is), mergeProps({
28
+ key: item.id
29
+ }, { ref_for: true }, rowOf(item).props, {
30
+ "aria-current": __props.isActive(item) ? "page" : void 0,
31
+ class: [
32
+ "shrink-0 rounded-control px-2.5 py-1 text-sm font-medium outline-none transition-colors duration-[var(--duration-fast)] focus-visible:ring-2 focus-visible:ring-ring",
33
+ item.disabled ? "cursor-not-allowed opacity-45" : __props.isActive(item) ? "bg-surface-soft text-ink" : "text-muted hover:text-ink"
34
+ ],
35
+ onClick: ($event) => emit("select", item)
36
+ }), {
37
+ default: withCtx(() => [
38
+ createTextVNode(toDisplayString(item.label), 1)
39
+ ]),
40
+ _: 2
41
+ }, 1040, ["aria-current", "class", "onClick"]);
42
+ }), 128))
43
+ ], 8, _hoisted_1);
44
+ };
45
+ }
46
+ });
47
+ export {
48
+ _sfc_main as _
49
+ };
@@ -0,0 +1,129 @@
1
+ import { defineComponent, computed, openBlock, createElementBlock, normalizeStyle, createElementVNode, Fragment, renderList, withModifiers } from "vue";
2
+ import { startPointerDrag } from "../composables/pointerDrag.js";
3
+ import { lttbIndices, MIN_RANGE_POINTS, clampRange, panRange } from "../components/chartWindow.js";
4
+ const _hoisted_1 = ["width"];
5
+ const _hoisted_2 = ["d"];
6
+ const _hoisted_3 = ["aria-label", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-valuetext", "onPointerdown", "onKeydown"];
7
+ const HEIGHT = 36;
8
+ const GRIP = 8;
9
+ const INSET = 2;
10
+ const OUTLINE_POINTS = 120;
11
+ const PAGE_DIVISOR = 10;
12
+ const _sfc_main = /* @__PURE__ */ defineComponent({
13
+ __name: "ChartRangeSelector",
14
+ props: {
15
+ values: {},
16
+ count: {},
17
+ range: {},
18
+ width: {},
19
+ labels: {},
20
+ startLabel: {},
21
+ endLabel: {}
22
+ },
23
+ emits: ["change"],
24
+ setup(__props, { emit: __emit }) {
25
+ const props = __props;
26
+ const emit = __emit;
27
+ const last = computed(() => Math.max(1, props.count - 1));
28
+ const whole = computed(() => props.range ?? { start: 0, end: props.count - 1 });
29
+ const toX = (index) => index / last.value * props.width;
30
+ const toIndex = (x) => x / (props.width || 1) * last.value;
31
+ const outline = computed(() => {
32
+ const picked = lttbIndices(props.values, OUTLINE_POINTS);
33
+ const present = picked.map((i) => props.values[i]);
34
+ if (present.length < MIN_RANGE_POINTS) return "";
35
+ const low = Math.min(...present);
36
+ const high = Math.max(...present);
37
+ const span = high - low || 1;
38
+ const room = HEIGHT - INSET * 2;
39
+ return picked.map((i, n) => `${n ? "L" : "M"}${toX(i).toFixed(1)} ${(HEIGHT - INSET - (present[n] - low) / span * room).toFixed(1)}`).join(" ");
40
+ });
41
+ const left = computed(() => toX(whole.value.start));
42
+ const right = computed(() => toX(whole.value.end));
43
+ function press(part, event) {
44
+ if (event.button !== 0) return;
45
+ const x = event.clientX;
46
+ const from = whole.value;
47
+ const { start, end } = from;
48
+ startPointerDrag(event, {
49
+ move(e) {
50
+ const delta = toIndex(e.clientX - x);
51
+ if (part === "window") emit("change", panRange(from, props.count, delta));
52
+ else if (part === "start") emit("change", clampRange({ start: Math.min(start + delta, end - 1), end }, props.count));
53
+ else emit("change", clampRange({ start, end: Math.max(end + delta, start + 1) }, props.count));
54
+ },
55
+ end: () => {
56
+ }
57
+ });
58
+ }
59
+ function onKey(part, event) {
60
+ const page = Math.max(1, Math.round(props.count / PAGE_DIVISOR));
61
+ const steps = { ArrowLeft: -1, ArrowDown: -1, ArrowRight: 1, ArrowUp: 1, PageDown: -page, PageUp: page };
62
+ const step = steps[event.key];
63
+ const { start, end } = whole.value;
64
+ if (event.key === "Home" || event.key === "End") {
65
+ event.preventDefault();
66
+ const edge = event.key === "Home" ? 0 : props.count - 1;
67
+ emit("change", clampRange(part === "start" ? { start: Math.min(edge, end - 1), end } : { start, end: Math.max(edge, start + 1) }, props.count));
68
+ return;
69
+ }
70
+ if (!step) return;
71
+ event.preventDefault();
72
+ emit("change", clampRange(part === "start" ? { start: Math.min(start + step, end - 1), end } : { start, end: Math.max(end + step, start + 1) }, props.count));
73
+ }
74
+ return (_ctx, _cache) => {
75
+ return openBlock(), createElementBlock("div", {
76
+ class: "relative select-none touch-none",
77
+ style: normalizeStyle({ height: `${HEIGHT}px`, width: `${__props.width}px` })
78
+ }, [
79
+ (openBlock(), createElementBlock("svg", {
80
+ width: __props.width,
81
+ height: HEIGHT,
82
+ class: "absolute inset-0 block",
83
+ "aria-hidden": "true"
84
+ }, [
85
+ createElementVNode("path", {
86
+ d: outline.value,
87
+ fill: "none",
88
+ stroke: "var(--color-line-strong)",
89
+ "stroke-width": "1"
90
+ }, null, 8, _hoisted_2)
91
+ ], 8, _hoisted_1)),
92
+ createElementVNode("div", {
93
+ class: "absolute inset-y-0 left-0 bg-surface-soft opacity-70",
94
+ style: normalizeStyle({ width: `${left.value}px` })
95
+ }, null, 4),
96
+ createElementVNode("div", {
97
+ class: "absolute inset-y-0 right-0 bg-surface-soft opacity-70",
98
+ style: normalizeStyle({ width: `${Math.max(0, __props.width - right.value)}px` })
99
+ }, null, 4),
100
+ createElementVNode("div", {
101
+ "data-lp-chart-window": "",
102
+ class: "absolute inset-y-0 cursor-grab border-y border-line-strong active:cursor-grabbing",
103
+ style: normalizeStyle({ left: `${left.value}px`, width: `${Math.max(1, right.value - left.value)}px` }),
104
+ onPointerdown: _cache[0] || (_cache[0] = ($event) => press("window", $event))
105
+ }, null, 36),
106
+ (openBlock(), createElementBlock(Fragment, null, renderList(["start", "end"], (edge) => {
107
+ return createElementVNode("div", {
108
+ key: edge,
109
+ role: "slider",
110
+ tabindex: "0",
111
+ "aria-orientation": "horizontal",
112
+ "aria-label": edge === "start" ? __props.startLabel : __props.endLabel,
113
+ "aria-valuemin": edge === "start" ? 0 : whole.value.start + 1,
114
+ "aria-valuemax": edge === "start" ? whole.value.end - 1 : __props.count - 1,
115
+ "aria-valuenow": whole.value[edge],
116
+ "aria-valuetext": __props.labels[whole.value[edge]],
117
+ class: "absolute inset-y-0 -ml-1 cursor-ew-resize rounded-inner bg-line-strong outline-none focus-visible:ring-2 focus-visible:ring-ring",
118
+ style: normalizeStyle({ left: `${edge === "start" ? left.value : right.value}px`, width: `${GRIP}px` }),
119
+ onPointerdown: withModifiers(($event) => press(edge, $event), ["stop"]),
120
+ onKeydown: ($event) => onKey(edge, $event)
121
+ }, null, 44, _hoisted_3);
122
+ }), 64))
123
+ ], 4);
124
+ };
125
+ }
126
+ });
127
+ export {
128
+ _sfc_main as _
129
+ };
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, computed, resolveComponent, openBlock, createElementBlock, Fragment, renderList, createBlock, resolveDynamicComponent, createCommentVNode, withCtx, normalizeClass, createElementVNode, createTextVNode, toDisplayString, createVNode, unref, withModifiers } from "vue";
2
2
  import { DropdownMenuPortal, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuSub, DropdownMenuSeparator, DropdownMenuCheckboxItem, DropdownMenuItem, ContextMenuPortal, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuSub, ContextMenuSeparator, ContextMenuCheckboxItem, ContextMenuItem } from "reka-ui";
3
3
  import { usePortalTarget, useOutsideGuard } from "../composables/useView.js";
4
- import { _ as _sfc_main$1 } from "./LpIcon--5WSb3jJ.js";
4
+ import { _ as _sfc_main$1 } from "./LpIcon-C6JpQ5td.js";
5
5
  import MenuShortcut from "../components/MenuShortcut.vue.js";
6
6
  const _hoisted_1 = { class: "flex items-center gap-2" };
7
7
  const _hoisted_2 = { class: "flex items-center gap-2" };
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, useModel, ref, openBlock, createElementBlock, createElementVNode, createVNode, withCtx, createTextVNode, toDisplayString, normalizeClass, mergeModels } from "vue";
2
- import { _ as _sfc_main$2 } from "./LpButton-CFb44IjC.js";
3
- import { _ as _sfc_main$1 } from "./LpInput-Tw-yxT4I.js";
2
+ import { _ as _sfc_main$2 } from "./LpButton-DSHioIfD.js";
3
+ import { _ as _sfc_main$1 } from "./LpInput-DL6HEJdi.js";
4
4
  const _hoisted_1 = { class: "flex w-full flex-col gap-1.5" };
5
5
  const _hoisted_2 = { class: "flex items-center gap-2" };
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, useAttrs, ref, openBlock, createBlock, resolveDynamicComponent, normalizeStyle, unref, normalizeClass, withCtx, renderSlot } from "vue";
2
- import { _ as _sfc_main$1 } from "./LpFormField-Ch69Jd-X.js";
2
+ import { _ as _sfc_main$1 } from "./LpFormField-BKYn9dyP.js";
3
3
  const _sfc_main = /* @__PURE__ */ defineComponent({
4
4
  ...{ inheritAttrs: false },
5
5
  __name: "FieldWrapper",
@@ -0,0 +1,29 @@
1
+ import { defineComponent, openBlock, createElementBlock, normalizeClass, createVNode, unref } from "vue";
2
+ import { _ as _sfc_main$1 } from "./LpIcon-C6JpQ5td.js";
3
+ import { CLOSE_ICON } from "../components/dropdown.js";
4
+ const _hoisted_1 = ["aria-label"];
5
+ const _sfc_main = /* @__PURE__ */ defineComponent({
6
+ __name: "IconCloseButton",
7
+ props: {
8
+ label: {},
9
+ inline: { type: Boolean }
10
+ },
11
+ setup(__props) {
12
+ return (_ctx, _cache) => {
13
+ return openBlock(), createElementBlock("button", {
14
+ type: "button",
15
+ class: normalizeClass(["group flex shrink-0 items-center text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink", __props.inline ? void 0 : "rounded-inner p-1 focus-visible:ring-2 focus-visible:ring-ring"]),
16
+ "aria-label": __props.label
17
+ }, [
18
+ createVNode(_sfc_main$1, {
19
+ name: "lucide:x",
20
+ size: 16,
21
+ class: normalizeClass(unref(CLOSE_ICON))
22
+ }, null, 8, ["class"])
23
+ ], 10, _hoisted_1);
24
+ };
25
+ }
26
+ });
27
+ export {
28
+ _sfc_main as _
29
+ };
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, ref, computed, openBlock, createElementBlock, createVNode, withCtx, renderSlot, normalizeProps, guardReactiveProps } from "vue";
2
- import { _ as _sfc_main$1 } from "./LayoutNode-DF5BMN0J.js";
2
+ import { _ as _sfc_main$1 } from "./LayoutNode-D2f7v683.js";
3
3
  import { resizeAt, setActiveTab, reorderTab, removeBlock, moveLeaf } from "../layout/tree.js";
4
4
  import { layoutController } from "../layout/useLayout.js";
5
5
  const _hoisted_1 = { class: "flex min-h-0 min-w-0 flex-1" };