@leavepulse/ui 0.43.4 → 0.45.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 (437) hide show
  1. package/README.md +121 -7
  2. package/dist/assets/{LpCommandPalette-B-0Est4Z.css → LpCommandPalette-nGNnzXqQ.css} +21 -21
  3. package/dist/assets/{LpDropzone-BBoWvi-J.css → LpDropzone-i4BdMi1H.css} +12 -12
  4. package/dist/assets/{LpImageEditor-Ct7Y3aNu.css → LpImageEditor-CbMA82g8.css} +6 -6
  5. package/dist/assets/{LpRollingText-CR1mb0Vt.css → LpRollingText-BGnE6q9j.css} +3 -0
  6. package/dist/assets/{LpShortcutsDialog-C6YoQ8_M.css → LpShortcutsDialog-CqYX3yy6.css} +28 -7
  7. package/dist/assets/{LpSkeleton-D7xU8IPV.css → LpSkeleton-H3Z5dEIk.css} +4 -1
  8. package/dist/assets/{LpTable-BgPLJOXa.css → LpTable-CPwWxTJS.css} +49 -9
  9. package/dist/chunks/ContextMenuItems-BtKU7074.js +124 -0
  10. package/dist/chunks/{LayoutCanvas-Dd20boUG.js → LayoutCanvas-BkaGXTjx.js} +26 -9
  11. package/dist/chunks/{LayoutNode-DGpZA9LX.js → LayoutNode-B3_9E1Xa.js} +28 -12
  12. package/dist/chunks/{LpActionBar-BlvtGB2P.js → LpActionBar-CnfFVIwC.js} +26 -12
  13. package/dist/chunks/{LpAddressInput-B-Zvxsn7.js → LpAddressInput-BwX8uo4_.js} +54 -49
  14. package/dist/chunks/{LpAlert-BAYHDSS1.js → LpAlert-B6ilrM7T.js} +16 -9
  15. package/dist/chunks/{LpAppShell-BGQVIY-3.js → LpAppShell-C53_RaGF.js} +53 -26
  16. package/dist/chunks/{LpAutocomplete-DExlIZe_.js → LpAutocomplete-C8IgSMsi.js} +52 -24
  17. package/dist/chunks/{LpAvatar-B3-xAOH3.js → LpAvatar-C1XStdOo.js} +19 -10
  18. package/dist/chunks/LpBreadcrumbs-CQJd73Gm.js +95 -0
  19. package/dist/chunks/{LpButton-5VXXCjwF.js → LpButton-CKSwC6Mu.js} +45 -15
  20. package/dist/chunks/{LpCalendar-B7Ko5RdR.js → LpCalendar-DrA2McTU.js} +1 -1
  21. package/dist/chunks/{LpCard-BhI1N_vL.js → LpCard-C2IvucmX.js} +1 -1
  22. package/dist/chunks/{LpCheckbox-CVccKYaH.js → LpCheckbox-Bkj13CbW.js} +8 -4
  23. package/dist/chunks/{LpCodeBlock-Bo0B4TFR.js → LpCodeBlock-ca7ANFyW.js} +49 -17
  24. package/dist/chunks/{LpColorPicker-BlXea7LM.js → LpColorPicker-zz4VGkG4.js} +75 -26
  25. package/dist/chunks/{LpConfirmDialog-Q-bxff8z.js → LpConfirmDialog-DCw5jR1t.js} +59 -17
  26. package/dist/chunks/LpConfirmHost-CbywMpMP.js +49 -0
  27. package/dist/chunks/LpContextMenu-BqkAYa9X.js +69 -0
  28. package/dist/chunks/LpDatePicker-DuusgT69.js +195 -0
  29. package/dist/chunks/LpDateRangePicker-DHeuznfC.js +208 -0
  30. package/dist/chunks/{LpDisclosure-ChQYmjlR.js → LpDisclosure-Cc23-JOT.js} +1 -1
  31. package/dist/chunks/{LpDrawer-BZ6k3hvo.js → LpDrawer-Dt4aB4Fr.js} +65 -28
  32. package/dist/chunks/{LpDropdownMenu-DJpoqRCb.js → LpDropdownMenu-DdJGQzPn.js} +2 -1
  33. package/dist/chunks/{LpEmptyState-Dsdqz1Wj.js → LpEmptyState-BJbZXC8D.js} +1 -1
  34. package/dist/chunks/LpFieldNotice-wtieLUTj.js +64 -0
  35. package/dist/chunks/{LpFileTree-_5vFBgaK.js → LpFileTree-CNurOvkV.js} +25 -10
  36. package/dist/chunks/{LpFileTreeNode-BdcIYKIE.js → LpFileTreeNode-D_qRRdsH.js} +3 -3
  37. package/dist/chunks/LpFormField-CtVYj6tO.js +101 -0
  38. package/dist/chunks/{LpIcon-CCnX5_2j.js → LpIcon-DYtaid0K.js} +20 -6
  39. package/dist/chunks/{LpInput-9EXWUM9B.js → LpInput-D-YGQbEv.js} +58 -20
  40. package/dist/chunks/{LpLightbox-2sYVMY-S.js → LpLightbox-DSDahF23.js} +148 -61
  41. package/dist/chunks/{LpLink-DCND-zyu.js → LpLink-Krkjhe_y.js} +15 -6
  42. package/dist/chunks/{LpLogViewer-CaRy5MeS.js → LpLogViewer-KypbgOyo.js} +300 -72
  43. package/dist/chunks/{LpMapPicker-ul4oYno6.js → LpMapPicker-Cc84LaM3.js} +39 -14
  44. package/dist/chunks/{LpMediaGallery-FF-NquIo.js → LpMediaGallery-YKr-cQPN.js} +7 -4
  45. package/dist/chunks/{LpModal-Bt0pQCI_.js → LpModal-DMMDQHAu.js} +52 -29
  46. package/dist/chunks/{LpModalNav-YaifHrXC.js → LpModalNav-BVPDyIup.js} +10 -7
  47. package/dist/chunks/{LpNotificationBell-DyGGsMAM.js → LpNotificationBell-CCwyJP5C.js} +79 -33
  48. package/dist/chunks/{LpNumberField-CWuX08iX.js → LpNumberField-B77O-z28.js} +21 -8
  49. package/dist/chunks/{LpNumberFlow-amWYaeuA.js → LpNumberFlow-z4WPZcZu.js} +22 -12
  50. package/dist/chunks/{LpOtpInput-y2v-pmiN.js → LpOtpInput-CziPF3Oq.js} +37 -8
  51. package/dist/chunks/{LpPagination-5FxjmmB5.js → LpPagination-BcDlo3r_.js} +31 -20
  52. package/dist/chunks/{LpPasswordInput--sjYCkLS.js → LpPasswordInput-eKzQhbQP.js} +11 -8
  53. package/dist/chunks/LpPhoneInput-BCbrrhgE.js +336 -0
  54. package/dist/chunks/{LpPie-D6OnzwlJ.js → LpPie-BEJ2SfI6.js} +84 -28
  55. package/dist/chunks/{LpPopover-8268UmlC.js → LpPopover-DCKeqiVn.js} +5 -2
  56. package/dist/chunks/{LpProgress-Btq5W4Ut.js → LpProgress-CBU1iI69.js} +5 -4
  57. package/dist/chunks/{LpRadioGroup-xPIuVDO_.js → LpRadioGroup-DmEW0l78.js} +9 -2
  58. package/dist/chunks/LpRangeCalendar-DZuaRV0W.js +331 -0
  59. package/dist/chunks/{LpRollingText-CM5gkSeF.js → LpRollingText-DB7upf-5.js} +1 -1
  60. package/dist/chunks/{LpScrollArea-D8xyKXcF.js → LpScrollArea-Bry1fdOM.js} +14 -2
  61. package/dist/chunks/{LpSection-aM6J_u51.js → LpSection-tKEH0jYf.js} +1 -1
  62. package/dist/chunks/{LpSegmented-fV0Sk92p.js → LpSegmented-C09EEam2.js} +8 -4
  63. package/dist/chunks/{LpSelect-ANIVtrpM.js → LpSelect-DNIL6MB9.js} +50 -31
  64. package/dist/chunks/{LpSidebar-ClBUwoEz.js → LpSidebar-CQNB0-yU.js} +30 -22
  65. package/dist/chunks/{LpSidebarNav-llOcs_Fn.js → LpSidebarNav-kx-LdqNU.js} +16 -11
  66. package/dist/chunks/{LpSkeleton-CTI-vBgW.js → LpSkeleton-BB6XIV-w.js} +1 -1
  67. package/dist/chunks/{LpSlider-BwNIBkAK.js → LpSlider-Cuzmrd7p.js} +7 -2
  68. package/dist/chunks/{LpSparkline-C6xQ2dwv.js → LpSparkline-CB80N8SJ.js} +11 -4
  69. package/dist/chunks/{LpStat-CQaW8R--.js → LpStat-B-7udBRP.js} +2 -2
  70. package/dist/chunks/{LpStepper-Bk-XaQYU.js → LpStepper-C7XiVKZj.js} +34 -19
  71. package/dist/chunks/{LpSwitch-Blizvqyt.js → LpSwitch-OrcOJX9m.js} +41 -27
  72. package/dist/chunks/LpTableFilter-BV8PpLM9.js +158 -0
  73. package/dist/chunks/{LpTableOfContents-CjvxPMpU.js → LpTableOfContents-BUcAfGPQ.js} +36 -41
  74. package/dist/chunks/{LpTabs-Cefe_lys.js → LpTabs-29iW1XOx.js} +20 -6
  75. package/dist/chunks/LpTagsInput-D1SuqbhB.js +300 -0
  76. package/dist/chunks/LpTextarea-uuScWo6-.js +77 -0
  77. package/dist/chunks/LpThemeProvider-Be4r2TQX.js +35 -0
  78. package/dist/chunks/LpThemeSwitcher-B4aVPbNC.js +166 -0
  79. package/dist/chunks/{LpTilt-DuyKbpkA.js → LpTilt-B7KHX1zH.js} +2 -2
  80. package/dist/chunks/{LpTimeField-K6nAGboX.js → LpTimeField-Cqe7fXnh.js} +14 -8
  81. package/dist/chunks/{LpToaster-gDB1EaU3.js → LpToaster-DpJvoCOh.js} +94 -31
  82. package/dist/chunks/{LpTooltip-hCLPAqMG.js → LpTooltip-CXVKcOXT.js} +14 -6
  83. package/dist/chunks/LpTooltipProvider-CftjV7Xc.js +25 -0
  84. package/dist/chunks/{LpTopologyCanvas-Cm1L39uL.js → LpTopologyCanvas-6ozNrQKh.js} +8 -2
  85. package/dist/chunks/{LpUptimeBar-DvAMno0S.js → LpUptimeBar-ugcv25xj.js} +44 -15
  86. package/dist/chunks/icons-CkA0njzm.js +43 -0
  87. package/dist/chunks/{LpThemeSwitcher-Cue-myST.js → useTheme-DJm1JSsY.js} +215 -260
  88. package/dist/component-names.d.ts +1 -1
  89. package/dist/components/ContextMenuItems.vue.d.ts +8 -0
  90. package/dist/components/ContextMenuItems.vue.js +4 -0
  91. package/dist/components/LayoutCanvas.vue.js +1 -1
  92. package/dist/components/LayoutNode.vue.d.ts +4 -0
  93. package/dist/components/LayoutNode.vue.js +1 -1
  94. package/dist/components/LpActionBar.vue.d.ts +3 -0
  95. package/dist/components/LpActionBar.vue.js +1 -1
  96. package/dist/components/LpAddressInput.vue.d.ts +1 -1
  97. package/dist/components/LpAddressInput.vue.js +1 -1
  98. package/dist/components/LpAlert.vue.d.ts +9 -0
  99. package/dist/components/LpAlert.vue.js +1 -1
  100. package/dist/components/LpAppShell.vue.d.ts +10 -0
  101. package/dist/components/LpAppShell.vue.js +1 -1
  102. package/dist/components/LpAutocomplete.vue.d.ts +31 -6
  103. package/dist/components/LpAutocomplete.vue.js +1 -1
  104. package/dist/components/LpAvatar.vue.d.ts +3 -3
  105. package/dist/components/LpAvatar.vue.js +1 -1
  106. package/dist/components/LpBadge.vue.d.ts +2 -2
  107. package/dist/components/LpBreadcrumbs.vue.d.ts +13 -9
  108. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  109. package/dist/components/LpButton.vue.d.ts +35 -98
  110. package/dist/components/LpButton.vue.js +1 -1
  111. package/dist/components/LpCalendar.vue.js +1 -1
  112. package/dist/components/LpCard.vue.js +1 -1
  113. package/dist/components/LpChart.vue.d.ts +47 -3
  114. package/dist/components/LpChart.vue.js +377 -97
  115. package/dist/components/LpCheckbox.vue.js +1 -1
  116. package/dist/components/LpCodeBlock.vue.d.ts +2 -0
  117. package/dist/components/LpCodeBlock.vue.js +1 -1
  118. package/dist/components/LpColorPicker.vue.d.ts +2 -2
  119. package/dist/components/LpColorPicker.vue.js +1 -1
  120. package/dist/components/LpCommandPalette.vue.d.ts +14 -3
  121. package/dist/components/LpCommandPalette.vue.js +142 -77
  122. package/dist/components/LpConfirmDialog.vue.d.ts +15 -3
  123. package/dist/components/LpConfirmDialog.vue.js +1 -1
  124. package/dist/components/LpConfirmHost.vue.d.ts +9 -0
  125. package/dist/components/LpConfirmHost.vue.js +4 -0
  126. package/dist/components/LpContextMenu.vue.d.ts +3 -5
  127. package/dist/components/LpContextMenu.vue.js +1 -1
  128. package/dist/components/LpDatePicker.vue.d.ts +24 -6
  129. package/dist/components/LpDatePicker.vue.js +1 -1
  130. package/dist/components/LpDateRangePicker.vue.d.ts +60 -0
  131. package/dist/components/LpDateRangePicker.vue.js +4 -0
  132. package/dist/components/LpDisclosure.vue.js +1 -1
  133. package/dist/components/LpDrawer.vue.d.ts +10 -0
  134. package/dist/components/LpDrawer.vue.js +1 -1
  135. package/dist/components/LpDropdownMenu.vue.js +1 -1
  136. package/dist/components/LpDropzone.vue.js +23 -7
  137. package/dist/components/LpEmptyState.vue.js +1 -1
  138. package/dist/components/LpFieldNotice.vue.d.ts +8 -0
  139. package/dist/components/LpFieldNotice.vue.js +4 -0
  140. package/dist/components/LpFileTree.vue.d.ts +11 -2
  141. package/dist/components/LpFileTree.vue.js +1 -1
  142. package/dist/components/LpFileTreeNode.vue.js +1 -1
  143. package/dist/components/LpFormField.vue.d.ts +13 -1
  144. package/dist/components/LpFormField.vue.js +1 -1
  145. package/dist/components/LpIcon.vue.d.ts +0 -1
  146. package/dist/components/LpIcon.vue.js +1 -1
  147. package/dist/components/LpImageEditor.vue.js +93 -58
  148. package/dist/components/LpInput.vue.d.ts +22 -3
  149. package/dist/components/LpInput.vue.js +1 -1
  150. package/dist/components/LpLightbox.vue.d.ts +17 -0
  151. package/dist/components/LpLightbox.vue.js +1 -1
  152. package/dist/components/LpLink.vue.d.ts +11 -11
  153. package/dist/components/LpLink.vue.js +1 -1
  154. package/dist/components/LpLogViewer.vue.d.ts +72 -3
  155. package/dist/components/LpLogViewer.vue.js +1 -1
  156. package/dist/components/LpMapPicker.vue.d.ts +4 -4
  157. package/dist/components/LpMapPicker.vue.js +1 -1
  158. package/dist/components/LpMediaGallery.vue.js +1 -1
  159. package/dist/components/LpModal.vue.d.ts +16 -6
  160. package/dist/components/LpModal.vue.js +1 -1
  161. package/dist/components/LpModalNav.vue.d.ts +0 -1
  162. package/dist/components/LpModalNav.vue.js +1 -1
  163. package/dist/components/LpNotificationBell.vue.d.ts +11 -2
  164. package/dist/components/LpNotificationBell.vue.js +1 -1
  165. package/dist/components/LpNumberField.vue.d.ts +2 -0
  166. package/dist/components/LpNumberField.vue.js +1 -1
  167. package/dist/components/LpNumberFlow.vue.js +1 -1
  168. package/dist/components/LpOtpInput.vue.js +1 -1
  169. package/dist/components/LpPagination.vue.d.ts +2 -0
  170. package/dist/components/LpPagination.vue.js +1 -1
  171. package/dist/components/LpPasswordInput.vue.js +1 -1
  172. package/dist/components/LpPhoneInput.vue.d.ts +13 -0
  173. package/dist/components/LpPhoneInput.vue.js +1 -1
  174. package/dist/components/LpPie.vue.d.ts +21 -2
  175. package/dist/components/LpPie.vue.js +1 -1
  176. package/dist/components/LpPopover.vue.d.ts +2 -0
  177. package/dist/components/LpPopover.vue.js +1 -1
  178. package/dist/components/LpProgress.vue.d.ts +1 -1
  179. package/dist/components/LpProgress.vue.js +1 -1
  180. package/dist/components/LpRadioGroup.vue.js +1 -1
  181. package/dist/components/LpRangeCalendar.vue.d.ts +51 -0
  182. package/dist/components/LpRangeCalendar.vue.js +4 -0
  183. package/dist/components/LpRollingText.vue.d.ts +1 -1
  184. package/dist/components/LpRollingText.vue.js +1 -1
  185. package/dist/components/LpScrollArea.vue.d.ts +2 -2
  186. package/dist/components/LpScrollArea.vue.js +1 -1
  187. package/dist/components/LpSection.vue.d.ts +1 -1
  188. package/dist/components/LpSection.vue.js +1 -1
  189. package/dist/components/LpSegmented.vue.d.ts +5 -0
  190. package/dist/components/LpSegmented.vue.js +1 -1
  191. package/dist/components/LpSelect.vue.d.ts +1 -0
  192. package/dist/components/LpSelect.vue.js +1 -1
  193. package/dist/components/LpShortcutsDialog.vue.d.ts +7 -1
  194. package/dist/components/LpShortcutsDialog.vue.js +60 -15
  195. package/dist/components/LpSidebar.vue.d.ts +6 -2
  196. package/dist/components/LpSidebar.vue.js +1 -1
  197. package/dist/components/LpSidebarNav.vue.js +1 -1
  198. package/dist/components/LpSkeleton.vue.js +1 -1
  199. package/dist/components/LpSlider.vue.js +1 -1
  200. package/dist/components/LpSparkline.vue.d.ts +1 -0
  201. package/dist/components/LpSparkline.vue.js +1 -1
  202. package/dist/components/LpStat.vue.js +1 -1
  203. package/dist/components/LpStepper.vue.js +1 -1
  204. package/dist/components/LpSwitch.vue.js +1 -1
  205. package/dist/components/LpTable.vue.d.ts +107 -3
  206. package/dist/components/LpTable.vue.js +540 -128
  207. package/dist/components/LpTableFilter.vue.d.ts +31 -0
  208. package/dist/components/LpTableFilter.vue.js +4 -0
  209. package/dist/components/LpTableOfContents.vue.d.ts +4 -2
  210. package/dist/components/LpTableOfContents.vue.js +1 -1
  211. package/dist/components/LpTabs.vue.d.ts +2 -0
  212. package/dist/components/LpTabs.vue.js +1 -1
  213. package/dist/components/LpTagsInput.vue.d.ts +77 -0
  214. package/dist/components/LpTagsInput.vue.js +4 -0
  215. package/dist/components/LpTextarea.vue.d.ts +19 -6
  216. package/dist/components/LpTextarea.vue.js +1 -1
  217. package/dist/components/LpThemeProvider.vue.d.ts +22 -0
  218. package/dist/components/LpThemeProvider.vue.js +4 -0
  219. package/dist/components/LpThemeSwitcher.vue.d.ts +15 -2
  220. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  221. package/dist/components/LpTilt.vue.js +1 -1
  222. package/dist/components/LpTimeField.vue.js +1 -1
  223. package/dist/components/LpToaster.vue.d.ts +6 -1
  224. package/dist/components/LpToaster.vue.js +1 -1
  225. package/dist/components/LpTooltip.vue.d.ts +1 -2
  226. package/dist/components/LpTooltip.vue.js +1 -1
  227. package/dist/components/LpTooltipProvider.vue.d.ts +22 -0
  228. package/dist/components/LpTooltipProvider.vue.js +4 -0
  229. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  230. package/dist/components/LpUptimeBar.vue.d.ts +4 -0
  231. package/dist/components/LpUptimeBar.vue.js +1 -1
  232. package/dist/components/chart.d.ts +32 -1
  233. package/dist/components/chart.js +42 -6
  234. package/dist/components/codeHighlight.d.ts +6 -0
  235. package/dist/components/codeHighlight.js +92 -20
  236. package/dist/components/color.d.ts +1 -1
  237. package/dist/components/color.js +20 -9
  238. package/dist/components/commandSearch.js +3 -0
  239. package/dist/components/confirm.d.ts +25 -0
  240. package/dist/components/confirm.js +26 -0
  241. package/dist/components/countries.d.ts +6 -0
  242. package/dist/components/countries.js +7 -0
  243. package/dist/components/dateRange.d.ts +43 -0
  244. package/dist/components/dateRange.js +76 -0
  245. package/dist/components/exportData.d.ts +58 -0
  246. package/dist/components/exportData.js +165 -0
  247. package/dist/components/fileTree.js +16 -7
  248. package/dist/components/imageCrop.d.ts +42 -0
  249. package/dist/components/imageCrop.js +47 -0
  250. package/dist/components/link.d.ts +12 -0
  251. package/dist/components/link.js +19 -0
  252. package/dist/components/logSearch.d.ts +18 -0
  253. package/dist/components/logSearch.js +36 -0
  254. package/dist/components/modalDepth.d.ts +18 -2
  255. package/dist/components/modalDepth.js +17 -5
  256. package/dist/components/otp.d.ts +5 -0
  257. package/dist/components/otp.js +10 -0
  258. package/dist/components/phone.d.ts +41 -0
  259. package/dist/components/phone.js +80 -0
  260. package/dist/components/sidebar.d.ts +7 -1
  261. package/dist/components/tableFilter.d.ts +36 -0
  262. package/dist/components/tableFilter.js +84 -0
  263. package/dist/components/tableSort.d.ts +8 -0
  264. package/dist/components/tableSort.js +31 -0
  265. package/dist/components/tags.d.ts +20 -0
  266. package/dist/components/tags.js +37 -0
  267. package/dist/composables/useField.d.ts +38 -0
  268. package/dist/composables/useField.js +45 -0
  269. package/dist/composables/useFieldNotice.d.ts +17 -0
  270. package/dist/composables/useFieldNotice.js +28 -0
  271. package/dist/composables/useForm.d.ts +53 -0
  272. package/dist/composables/useForm.js +207 -0
  273. package/dist/composables/useFormDraft.d.ts +10 -3
  274. package/dist/composables/useFormDraft.js +9 -14
  275. package/dist/composables/useHotkeys.d.ts +81 -5
  276. package/dist/composables/useHotkeys.js +223 -25
  277. package/dist/composables/useInputFilter.d.ts +17 -0
  278. package/dist/composables/useInputFilter.js +47 -10
  279. package/dist/composables/useInputMask.d.ts +59 -0
  280. package/dist/composables/useInputMask.js +170 -0
  281. package/dist/composables/useLpConfig.d.ts +24 -0
  282. package/dist/composables/useLpConfig.js +44 -0
  283. package/dist/composables/usePaintSelect.d.ts +22 -0
  284. package/dist/composables/usePaintSelect.js +169 -0
  285. package/dist/composables/useRovingFocus.js +7 -0
  286. package/dist/composables/useShift.js +7 -2
  287. package/dist/composables/useTilt.d.ts +2 -2
  288. package/dist/composables/useTilt.js +5 -6
  289. package/dist/composables/useToast.d.ts +20 -0
  290. package/dist/composables/useToast.js +28 -4
  291. package/dist/composables/useZoomPan.d.ts +3 -3
  292. package/dist/composables/useZoomPan.js +4 -4
  293. package/dist/icons-all.d.ts +1 -0
  294. package/dist/icons-all.js +3 -0
  295. package/dist/icons.d.ts +14 -1
  296. package/dist/index.d.ts +60 -4
  297. package/dist/index.js +245 -141
  298. package/dist/kit-icons.d.ts +2 -0
  299. package/dist/layout/tree.d.ts +2 -0
  300. package/dist/layout/tree.js +16 -1
  301. package/dist/layout/useLayout.d.ts +15 -0
  302. package/dist/layout/useLayout.js +41 -14
  303. package/dist/theme/backdrop.d.ts +12 -0
  304. package/dist/theme/presets.d.ts +0 -2
  305. package/dist/theme/useTheme.d.ts +32 -9
  306. package/package.json +18 -8
  307. package/src/component-names.ts +9 -7
  308. package/src/components/ContextMenuItems.vue +88 -0
  309. package/src/components/LayoutCanvas.vue +26 -6
  310. package/src/components/LayoutNode.vue +30 -4
  311. package/src/components/LpActionBar.vue +31 -8
  312. package/src/components/LpAddressInput.vue +57 -41
  313. package/src/components/LpAlert.vue +16 -3
  314. package/src/components/LpAppShell.vue +45 -12
  315. package/src/components/LpAutocomplete.vue +47 -10
  316. package/src/components/LpAvatar.vue +20 -6
  317. package/src/components/LpBreadcrumbs.vue +65 -41
  318. package/src/components/LpButton.vue +60 -14
  319. package/src/components/LpChart.vue +351 -28
  320. package/src/components/LpCheckbox.vue +7 -3
  321. package/src/components/LpCodeBlock.vue +50 -14
  322. package/src/components/LpColorPicker.vue +73 -10
  323. package/src/components/LpCommandPalette.vue +115 -20
  324. package/src/components/LpConfirmDialog.vue +68 -17
  325. package/src/components/LpConfirmHost.vue +59 -0
  326. package/src/components/LpContextMenu.vue +15 -116
  327. package/src/components/LpDatePicker.vue +104 -68
  328. package/src/components/LpDateRangePicker.vue +224 -0
  329. package/src/components/LpDrawer.vue +56 -19
  330. package/src/components/LpDropdownMenu.vue +1 -0
  331. package/src/components/LpDropzone.vue +21 -4
  332. package/src/components/LpFieldNotice.vue +65 -0
  333. package/src/components/LpFileTree.vue +33 -7
  334. package/src/components/LpFormField.vue +59 -7
  335. package/src/components/LpIcon.vue +22 -4
  336. package/src/components/LpImageEditor.vue +96 -57
  337. package/src/components/LpInput.vue +62 -11
  338. package/src/components/LpLightbox.vue +140 -29
  339. package/src/components/LpLink.vue +24 -13
  340. package/src/components/LpLogViewer.vue +311 -39
  341. package/src/components/LpMapPicker.vue +36 -13
  342. package/src/components/LpMediaGallery.vue +8 -2
  343. package/src/components/LpModal.vue +54 -28
  344. package/src/components/LpModalNav.vue +5 -2
  345. package/src/components/LpNotificationBell.vue +77 -23
  346. package/src/components/LpNumberField.vue +21 -6
  347. package/src/components/LpNumberFlow.vue +26 -10
  348. package/src/components/LpOtpInput.vue +43 -8
  349. package/src/components/LpPagination.vue +23 -7
  350. package/src/components/LpPasswordInput.vue +4 -1
  351. package/src/components/LpPhoneInput.vue +224 -39
  352. package/src/components/LpPie.vue +102 -20
  353. package/src/components/LpPopover.vue +4 -0
  354. package/src/components/LpProgress.vue +5 -3
  355. package/src/components/LpRadioGroup.vue +9 -2
  356. package/src/components/LpRangeCalendar.vue +365 -0
  357. package/src/components/LpRollingText.vue +3 -0
  358. package/src/components/LpScrollArea.vue +22 -2
  359. package/src/components/LpSegmented.vue +12 -2
  360. package/src/components/LpSelect.vue +0 -0
  361. package/src/components/LpShortcutsDialog.vue +83 -9
  362. package/src/components/LpSidebar.vue +14 -9
  363. package/src/components/LpSidebarNav.vue +17 -5
  364. package/src/components/LpSkeleton.vue +4 -1
  365. package/src/components/LpSlider.vue +7 -1
  366. package/src/components/LpSparkline.vue +11 -3
  367. package/src/components/LpStepper.vue +23 -10
  368. package/src/components/LpSwitch.vue +31 -8
  369. package/src/components/LpTable.vue +668 -90
  370. package/src/components/LpTableFilter.vue +175 -0
  371. package/src/components/LpTableOfContents.vue +50 -32
  372. package/src/components/LpTabs.vue +23 -6
  373. package/src/components/LpTagsInput.vue +364 -0
  374. package/src/components/LpTextarea.vue +44 -6
  375. package/src/components/LpThemeProvider.vue +41 -0
  376. package/src/components/LpThemeSwitcher.vue +76 -33
  377. package/src/components/LpTilt.vue +2 -2
  378. package/src/components/LpTimeField.vue +14 -3
  379. package/src/components/LpToaster.vue +115 -27
  380. package/src/components/LpTooltip.vue +29 -5
  381. package/src/components/LpTooltipProvider.vue +24 -0
  382. package/src/components/LpTopologyCanvas.vue +19 -2
  383. package/src/components/LpUptimeBar.vue +46 -8
  384. package/src/components/chart.ts +82 -8
  385. package/src/components/codeHighlight.ts +111 -15
  386. package/src/components/color.ts +30 -9
  387. package/src/components/commandSearch.ts +6 -0
  388. package/src/components/confirm.ts +58 -0
  389. package/src/components/countries.ts +12 -0
  390. package/src/components/dateRange.ts +134 -0
  391. package/src/components/exportData.ts +228 -0
  392. package/src/components/fileTree.ts +19 -7
  393. package/src/components/imageCrop.ts +107 -0
  394. package/src/components/link.ts +34 -0
  395. package/src/components/logSearch.ts +46 -0
  396. package/src/components/modalDepth.ts +48 -6
  397. package/src/components/otp.ts +16 -0
  398. package/src/components/phone.ts +140 -0
  399. package/src/components/sidebar.ts +7 -1
  400. package/src/components/tableFilter.ts +122 -0
  401. package/src/components/tableSort.ts +37 -0
  402. package/src/components/tags.ts +62 -0
  403. package/src/composables/useField.ts +83 -0
  404. package/src/composables/useFieldNotice.ts +59 -0
  405. package/src/composables/useForm.ts +314 -0
  406. package/src/composables/useFormDraft.ts +25 -20
  407. package/src/composables/useHotkeys.ts +355 -28
  408. package/src/composables/useInputFilter.ts +77 -14
  409. package/src/composables/useInputMask.ts +254 -0
  410. package/src/composables/useLpConfig.ts +87 -0
  411. package/src/composables/usePaintSelect.ts +243 -0
  412. package/src/composables/useRovingFocus.ts +11 -0
  413. package/src/composables/useShift.ts +13 -2
  414. package/src/composables/useTilt.ts +5 -6
  415. package/src/composables/useToast.ts +56 -4
  416. package/src/composables/useZoomPan.ts +6 -6
  417. package/src/iconSubset.d.mts +10 -0
  418. package/src/iconSubset.mjs +51 -0
  419. package/src/icons-all.ts +10 -0
  420. package/src/icons.ts +59 -8
  421. package/src/index.ts +73 -4
  422. package/src/kit-icons.ts +5 -0
  423. package/src/layout/tree.ts +30 -0
  424. package/src/layout/useLayout.ts +68 -18
  425. package/src/nuxt.ts +87 -17
  426. package/src/runtime/config.plugin.ts +14 -0
  427. package/src/runtime/theme.plugin.ts +43 -23
  428. package/src/theme/backdrop.ts +69 -0
  429. package/src/theme/presets.ts +6 -64
  430. package/src/theme/useTheme.ts +206 -100
  431. package/src/tokens/tokens.css +46 -0
  432. package/dist/chunks/LpBreadcrumbs-p4jHe_V-.js +0 -62
  433. package/dist/chunks/LpContextMenu-CwW1QXe_.js +0 -217
  434. package/dist/chunks/LpDatePicker-CwOToxGq.js +0 -164
  435. package/dist/chunks/LpFormField-CazBc2-a.js +0 -62
  436. package/dist/chunks/LpPhoneInput-BDSKVl_z.js +0 -209
  437. package/dist/chunks/LpTextarea-t7F6gv8E.js +0 -47
@@ -1,7 +1,57 @@
1
- import { computed, readonly, shallowRef, defineComponent, onMounted, ref, openBlock, createBlock, withCtx, createElementVNode, normalizeClass, createElementBlock, normalizeStyle, createVNode, toDisplayString, createCommentVNode } from "vue";
1
+ import { computed, readonly, shallowRef } from "vue";
2
2
  import { prefersReducedMotion, easingToken } from "../composables/easing.js";
3
- import { _ as _sfc_main$1 } from "./LpContextMenu-CwW1QXe_.js";
4
- import { _ as _sfc_main$2 } from "./LpIcon-CCnX5_2j.js";
3
+ const NO_BACKDROP_ATTR = "data-lp-no-backdrop";
4
+ function isBrokenBackdropEngine(nav = navigator) {
5
+ const ua = nav.userAgent;
6
+ if (!/AppleWebKit/.test(ua)) return false;
7
+ if (/Chrome|Chromium|Edg\//.test(ua)) return false;
8
+ return !/Mac|iPhone|iPad|iPod/.test(nav.platform || "");
9
+ }
10
+ function detectBackdropFilter(root = document.documentElement) {
11
+ if (typeof navigator === "undefined") return true;
12
+ const usable = !isBrokenBackdropEngine();
13
+ root.toggleAttribute(NO_BACKDROP_ATTR, !usable);
14
+ return usable;
15
+ }
16
+ const GLASS_BACKDROP_ATTR = "data-lp-glass-backdrop";
17
+ let tracking = 0;
18
+ let observer;
19
+ function trackPanels() {
20
+ const panels = document.querySelectorAll(".lp-glass-overlay");
21
+ for (const panel of panels) {
22
+ const rect = panel.getBoundingClientRect();
23
+ const x = `${Math.round(rect.left)}px`;
24
+ const y = `${Math.round(rect.top)}px`;
25
+ if (panel.style.getPropertyValue("--lp-gx") !== x) panel.style.setProperty("--lp-gx", x);
26
+ if (panel.style.getPropertyValue("--lp-gy") !== y) panel.style.setProperty("--lp-gy", y);
27
+ }
28
+ tracking = panels.length ? requestAnimationFrame(trackPanels) : 0;
29
+ }
30
+ function startTracking() {
31
+ if (!tracking && document.querySelector(".lp-glass-overlay")) tracking = requestAnimationFrame(trackPanels);
32
+ }
33
+ function setGlassBackdrop(background, options = {}) {
34
+ if (typeof document === "undefined") return;
35
+ const root = options.root ?? document.documentElement;
36
+ if (!background) {
37
+ root.removeAttribute(GLASS_BACKDROP_ATTR);
38
+ root.style.removeProperty("--lp-glass-backdrop");
39
+ root.style.removeProperty("--lp-glass-backdrop-filter");
40
+ observer?.disconnect();
41
+ observer = void 0;
42
+ return;
43
+ }
44
+ root.setAttribute(GLASS_BACKDROP_ATTR, "");
45
+ root.style.setProperty("--lp-glass-backdrop", background);
46
+ if (options.filter) root.style.setProperty("--lp-glass-backdrop-filter", options.filter);
47
+ else root.style.removeProperty("--lp-glass-backdrop-filter");
48
+ if (!root.hasAttribute(NO_BACKDROP_ATTR) || typeof MutationObserver === "undefined") return;
49
+ if (!observer) {
50
+ observer = new MutationObserver(startTracking);
51
+ observer.observe(document.body, { childList: true, subtree: true });
52
+ }
53
+ startTracking();
54
+ }
5
55
  const sharedShape = { radiusControl: 8, radiusCard: 14, radiusPill: 9999 };
6
56
  const sharedDensity = { spacingUnit: 4, controlSm: 32, controlMd: 38, controlLg: 44 };
7
57
  const interFont = {
@@ -9,7 +59,7 @@ const interFont = {
9
59
  mono: '"JetBrains Mono", "SF Mono", ui-monospace, monospace'
10
60
  };
11
61
  const dark = {
12
- name: "Onyx",
62
+ name: "Dark",
13
63
  mode: "dark",
14
64
  colors: {
15
65
  surface: "#080b0d",
@@ -106,49 +156,6 @@ const lime = {
106
156
  mono: '"IBM Plex Mono", "JetBrains Mono", ui-monospace, monospace'
107
157
  }
108
158
  };
109
- const glassSurface = {
110
- borderWidth: "1px",
111
- panelBlur: "10px",
112
- panelSaturate: "120%",
113
- panelOverlay: "linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.01))",
114
- panelShadow: "0 20px 60px rgba(0, 0, 0, 0.35)",
115
- panelInset: "inset 0 1px 0 rgba(255, 255, 255, 0.08)"
116
- };
117
- const leavepulse = {
118
- name: "Dark",
119
- mode: "dark",
120
- colors: {
121
- surface: "#020618",
122
- surfaceRaised: "#0b1222",
123
- surfaceSoft: "rgba(11, 18, 34, 0.7)",
124
- ink: "#f3f6ff",
125
- inkInverse: "#0b1222",
126
- muted: "#94a3bf",
127
- mutedStrong: "#cad5e2",
128
- brand: "#00bcff",
129
- brandHover: "#19c3ff",
130
- brandSoft: "rgba(0, 188, 255, 0.2)",
131
- action: "#44c2ad",
132
- actionHover: "#56d3be",
133
- actionSoft: "rgba(68, 194, 173, 0.14)",
134
- accent: "#d36a2c",
135
- accentHover: "#da824e",
136
- accentSoft: "rgba(211, 106, 44, 0.14)",
137
- danger: "#f87171",
138
- dangerHover: "#fca5a5",
139
- dangerSoft: "rgba(248, 113, 113, 0.14)",
140
- line: "#1c2740",
141
- lineStrong: "rgba(255, 255, 255, 0.15)",
142
- ring: "rgba(0, 188, 255, 0.35)"
143
- },
144
- shape: { ...sharedShape, radiusControl: 12 },
145
- density: { ...sharedDensity },
146
- font: {
147
- sans: '"Inter", "IBM Plex Sans", "Segoe UI", sans-serif',
148
- mono: '"JetBrains Mono", "SF Mono", ui-monospace, monospace'
149
- },
150
- surface: glassSurface
151
- };
152
159
  const rose = {
153
160
  name: "Rose",
154
161
  mode: "dark",
@@ -273,20 +280,7 @@ const nord = {
273
280
  density: { ...sharedDensity },
274
281
  font: { ...interFont }
275
282
  };
276
- const presets = { dark, light, lime, leavepulse, rose, amber, violet, nord };
277
- const NO_BACKDROP_ATTR = "data-lp-no-backdrop";
278
- function isBrokenBackdropEngine(nav = navigator) {
279
- const ua = nav.userAgent;
280
- if (!/AppleWebKit/.test(ua)) return false;
281
- if (/Chrome|Chromium|Edg\//.test(ua)) return false;
282
- return !/Mac|iPhone|iPad|iPod/.test(nav.platform || "");
283
- }
284
- function detectBackdropFilter(root = document.documentElement) {
285
- if (typeof navigator === "undefined") return true;
286
- const usable = !isBrokenBackdropEngine();
287
- root.toggleAttribute(NO_BACKDROP_ATTR, !usable);
288
- return usable;
289
- }
283
+ const presets = { dark, light, lime, rose, amber, violet, nord };
290
284
  const COLOR_VARS = {
291
285
  surface: "--color-surface",
292
286
  surfaceRaised: "--color-surface-raised",
@@ -344,42 +338,103 @@ const DEFAULT_SURFACE = {
344
338
  };
345
339
  const CACHE_KEY = "leavepulse-ui-theme";
346
340
  const _current = shallowRef(null);
341
+ const _system = shallowRef(null);
347
342
  let _hydrated = false;
348
343
  let _fallback = null;
349
- function hydrateOnce() {
350
- if (_hydrated || typeof window === "undefined") return;
351
- _hydrated = true;
344
+ const DARK_QUERY = "(prefers-color-scheme: dark)";
345
+ let _media = null;
346
+ function prefersDarkScheme() {
347
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return true;
348
+ return window.matchMedia(DARK_QUERY).matches || !window.matchMedia("(prefers-color-scheme: light)").matches;
349
+ }
350
+ function pick(system, dark2 = prefersDarkScheme()) {
351
+ return dark2 ? system.dark : system.light;
352
+ }
353
+ function onSchemeChange(event) {
354
+ const system = _system.value;
355
+ if (!system) return;
356
+ const theme = pick(system, event.matches);
357
+ applyTheme(theme);
358
+ _current.value = theme;
359
+ }
360
+ function followSystem(system) {
361
+ _system.value = system;
362
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
363
+ if (system && !_media) {
364
+ _media = window.matchMedia(DARK_QUERY);
365
+ _media.addEventListener("change", onSchemeChange);
366
+ } else if (!system && _media) {
367
+ _media.removeEventListener("change", onSchemeChange);
368
+ _media = null;
369
+ }
370
+ }
371
+ function readCache() {
352
372
  try {
353
373
  const cached = localStorage.getItem(CACHE_KEY);
354
- if (cached) {
355
- _current.value = parseTheme(cached);
356
- applyTheme(_current.value);
357
- return;
374
+ if (!cached) return null;
375
+ const raw = JSON.parse(cached);
376
+ if (raw && typeof raw === "object" && raw.system) {
377
+ return {
378
+ system: {
379
+ light: parseTheme(JSON.stringify(raw.system.light)),
380
+ dark: parseTheme(JSON.stringify(raw.system.dark))
381
+ }
382
+ };
358
383
  }
384
+ return { theme: parseTheme(cached) };
359
385
  } catch {
386
+ return null;
360
387
  }
361
- if (_fallback) {
388
+ }
389
+ function hydrateOnce() {
390
+ if (_hydrated || typeof window === "undefined") return;
391
+ _hydrated = true;
392
+ const cached = readCache();
393
+ if (cached?.system) {
394
+ followSystem(cached.system);
395
+ _current.value = pick(cached.system);
396
+ writeThemeCookie(systemCookieValue(cached.system));
397
+ } else if (cached?.theme) {
398
+ _current.value = cached.theme;
399
+ writeThemeCookie(cached.theme.name);
400
+ } else if (_fallback) {
362
401
  _current.value = _fallback;
363
- applyTheme(_fallback);
402
+ } else {
403
+ return;
364
404
  }
405
+ applyTheme(_current.value);
365
406
  }
366
- function applyTheme(theme, root = document.documentElement) {
407
+ const DERIVED_VARS = [
408
+ ["--color-surface-overlay", "color-mix(in srgb, var(--color-surface-raised) 94%, transparent)"],
409
+ ["--color-node-compute", "var(--color-action)"],
410
+ ["--color-node-transit", "var(--color-accent)"],
411
+ ["--color-node-edge", "var(--color-brand)"],
412
+ ["--color-node-unknown", "var(--color-line-strong)"]
413
+ ];
414
+ function themeEntries(input) {
415
+ const theme = normalizeTheme(input);
416
+ const out = [];
367
417
  for (const [key, cssVar] of Object.entries(COLOR_VARS)) {
368
- root.style.setProperty(cssVar, theme.colors[key]);
418
+ out.push([cssVar, theme.colors[key]]);
369
419
  }
370
420
  for (const [key, cssVar] of Object.entries(SHAPE_VARS)) {
371
- root.style.setProperty(cssVar, `${theme.shape[key]}px`);
421
+ out.push([cssVar, `${theme.shape[key]}px`]);
372
422
  }
373
423
  for (const [key, cssVar] of Object.entries(DENSITY_VARS)) {
374
- root.style.setProperty(cssVar, `${theme.density[key]}px`);
424
+ out.push([cssVar, `${theme.density[key]}px`]);
375
425
  }
376
426
  for (const [key, cssVar] of Object.entries(FONT_VARS)) {
377
- root.style.setProperty(cssVar, theme.font[key]);
427
+ out.push([cssVar, theme.font[key]]);
378
428
  }
379
429
  const surface = theme.surface ?? DEFAULT_SURFACE;
380
430
  for (const [key, cssVar] of Object.entries(SURFACE_VARS)) {
381
- root.style.setProperty(cssVar, surface[key]);
431
+ out.push([cssVar, surface[key]]);
382
432
  }
433
+ for (const [cssVar, value] of DERIVED_VARS) out.push([cssVar, value]);
434
+ return out;
435
+ }
436
+ function applyTheme(theme, root = document.documentElement) {
437
+ for (const [cssVar, value] of themeEntries(theme)) root.style.setProperty(cssVar, value);
383
438
  root.dataset.themeMode = theme.mode;
384
439
  root.style.colorScheme = theme.mode;
385
440
  detectBackdropFilter(root);
@@ -420,47 +475,36 @@ function serializeTheme(theme) {
420
475
  return JSON.stringify(theme);
421
476
  }
422
477
  function themeToCssVars(theme) {
423
- const decls = [];
424
- for (const [key, cssVar] of Object.entries(COLOR_VARS)) {
425
- decls.push(`${cssVar}: ${theme.colors[key]}`);
426
- }
427
- for (const [key, cssVar] of Object.entries(SHAPE_VARS)) {
428
- decls.push(`${cssVar}: ${theme.shape[key]}px`);
429
- }
430
- for (const [key, cssVar] of Object.entries(DENSITY_VARS)) {
431
- decls.push(`${cssVar}: ${theme.density[key]}px`);
432
- }
433
- for (const [key, cssVar] of Object.entries(FONT_VARS)) {
434
- decls.push(`${cssVar}: ${theme.font[key]}`);
435
- }
436
- const surface = theme.surface ?? DEFAULT_SURFACE;
437
- for (const [key, cssVar] of Object.entries(SURFACE_VARS)) {
438
- decls.push(`${cssVar}: ${surface[key]}`);
439
- }
440
- return decls.join("; ");
478
+ return themeEntries(theme).map(([cssVar, value]) => `${cssVar}: ${value}`).join("; ");
441
479
  }
442
480
  function themeToCssRule(theme, selector = ":root") {
443
481
  return `${selector} { color-scheme: ${theme.mode}; ${themeToCssVars(theme)}; }`;
444
482
  }
445
- const DEFAULT_FONT = {
446
- sans: '"Inter", "Segoe UI", system-ui, sans-serif',
447
- mono: '"JetBrains Mono", "SF Mono", ui-monospace, monospace'
448
- };
483
+ function normalizeTheme(raw) {
484
+ const mode = raw.mode === "light" ? "light" : "dark";
485
+ const base = mode === "light" ? light : dark;
486
+ return {
487
+ name: typeof raw.name === "string" ? raw.name : base.name,
488
+ mode,
489
+ colors: { ...base.colors, ...raw.colors },
490
+ shape: { ...base.shape, ...raw.shape },
491
+ density: { ...base.density, ...raw.density },
492
+ font: { ...base.font, ...raw.font },
493
+ surface: raw.surface ? { ...DEFAULT_SURFACE, ...raw.surface } : void 0
494
+ };
495
+ }
449
496
  function parseTheme(json) {
450
497
  const raw = JSON.parse(json);
451
498
  if (!raw || typeof raw !== "object" || !raw.colors || !raw.shape || !raw.density) {
452
499
  throw new Error("Invalid theme: missing colors/shape/density");
453
500
  }
454
- return { ...raw, font: raw.font ?? DEFAULT_FONT };
501
+ return normalizeTheme(raw);
455
502
  }
456
503
  function bootstrapTheme(fallback) {
457
- let theme = fallback;
458
- try {
459
- const cached = localStorage.getItem(CACHE_KEY);
460
- if (cached) theme = parseTheme(cached);
461
- } catch {
462
- }
463
- applyTheme(theme);
504
+ const cached = typeof window === "undefined" ? null : readCache();
505
+ const theme = cached?.system ? pick(cached.system) : cached?.theme ?? fallback;
506
+ if (cached?.system) followSystem(cached.system);
507
+ if (typeof document !== "undefined") applyTheme(theme);
464
508
  return theme;
465
509
  }
466
510
  function cacheTheme(theme) {
@@ -470,203 +514,114 @@ function cacheTheme(theme) {
470
514
  }
471
515
  writeThemeCookie(theme.name);
472
516
  }
517
+ function cacheSystemThemes(system) {
518
+ try {
519
+ localStorage.setItem(CACHE_KEY, JSON.stringify({ system }));
520
+ } catch {
521
+ }
522
+ writeThemeCookie(systemCookieValue(system));
523
+ }
473
524
  const THEME_COOKIE = "lp-theme";
525
+ const SYSTEM_PREFIX = "system:";
474
526
  const COOKIE_MAX_AGE = 60 * 60 * 24 * 365;
475
- function writeThemeCookie(name) {
527
+ function systemCookieValue(system) {
528
+ return `${SYSTEM_PREFIX}${system.light.name}|${system.dark.name}`;
529
+ }
530
+ function writeThemeCookie(value) {
476
531
  if (typeof document === "undefined") return;
477
- document.cookie = `${THEME_COOKIE}=${encodeURIComponent(name)}; path=/; max-age=${COOKIE_MAX_AGE}; samesite=lax`;
532
+ document.cookie = `${THEME_COOKIE}=${encodeURIComponent(value)}; path=/; max-age=${COOKIE_MAX_AGE}; samesite=lax`;
533
+ }
534
+ function safeDecode(value) {
535
+ try {
536
+ return decodeURIComponent(value);
537
+ } catch {
538
+ return value;
539
+ }
478
540
  }
479
- function themeFromCookie(cookieValue, themes) {
541
+ function themeFromCookie(cookieValue, themes, options = {}) {
480
542
  if (!cookieValue) return null;
481
- const name = decodeURIComponent(cookieValue);
482
- return themes.find((theme) => theme.name === name) ?? null;
543
+ const find = (name) => themes.find((theme) => theme.name === name) ?? null;
544
+ for (const value of [cookieValue, safeDecode(cookieValue)]) {
545
+ if (value.startsWith(SYSTEM_PREFIX)) {
546
+ const [lightName = "", darkName = ""] = value.slice(SYSTEM_PREFIX.length).split("|");
547
+ const wanted = options.prefersDark === false ? lightName : darkName;
548
+ const found2 = find(wanted);
549
+ if (found2) return found2;
550
+ continue;
551
+ }
552
+ const found = find(value);
553
+ if (found) return found;
554
+ }
555
+ return null;
483
556
  }
484
557
  function useTheme() {
485
558
  hydrateOnce();
486
- const setTheme = (theme, origin) => {
487
- if (origin) applyThemeWithTransition(theme, origin);
488
- else applyThemeWithTransition(theme);
559
+ const commit = (theme) => {
560
+ followSystem(null);
489
561
  cacheTheme(theme);
490
562
  _current.value = theme;
491
563
  };
492
564
  return {
493
565
  current: readonly(_current),
494
566
  currentName: computed(() => _current.value?.name ?? ""),
495
- setTheme,
567
+ system: computed(() => _system.value !== null),
568
+ setTheme: (theme, origin) => {
569
+ applyThemeWithTransition(theme, origin);
570
+ commit(theme);
571
+ },
572
+ setSystem: (themes, origin) => {
573
+ const theme = pick(themes);
574
+ applyThemeWithTransition(theme, origin);
575
+ followSystem(themes);
576
+ cacheSystemThemes(themes);
577
+ _current.value = theme;
578
+ },
496
579
  init: (fallback) => {
497
580
  _fallback = fallback;
498
- if (!_hydrated) hydrateOnce();
499
- if (!_current.value) {
500
- _current.value = bootstrapTheme(fallback);
501
- }
581
+ hydrateOnce();
582
+ if (!_current.value) _current.value = bootstrapTheme(fallback);
502
583
  return _current.value;
503
584
  },
504
585
  apply: (theme) => {
505
586
  applyTheme(theme);
506
- cacheTheme(theme);
507
- _current.value = theme;
587
+ commit(theme);
508
588
  },
509
- /**
510
- * Apply + cache a theme with the circular reveal animation. Pass the click
511
- * point (e.g. from a toggle's `event`) as `origin` so the circle grows from
512
- * the button; omit it to reveal from the viewport centre.
513
- */
514
589
  applyWithTransition: (theme, origin) => {
515
590
  applyThemeWithTransition(theme, origin);
516
- cacheTheme(theme);
517
- _current.value = theme;
591
+ commit(theme);
518
592
  },
519
593
  serialize: serializeTheme,
520
594
  parse: parseTheme,
521
595
  bootstrap: bootstrapTheme
522
596
  };
523
597
  }
524
- const _hoisted_1 = ["aria-label", "title"];
525
- const _hoisted_2 = {
526
- key: 2,
527
- class: "text-sm font-medium"
528
- };
529
- const _sfc_main = /* @__PURE__ */ defineComponent({
530
- __name: "LpThemeSwitcher",
531
- props: {
532
- modelValue: {},
533
- themes: {},
534
- cycleThemes: {},
535
- variant: { default: "swatch" },
536
- showLabel: { type: Boolean },
537
- default: {},
538
- transition: { type: Boolean, default: true },
539
- size: { default: "md" },
540
- "aria-label": {}
541
- },
542
- emits: ["update:modelValue", "change"],
543
- setup(__props, { emit: __emit }) {
544
- const props = __props;
545
- const emit = __emit;
546
- const theme = useTheme();
547
- const list = computed(
548
- () => props.themes && props.themes.length ? props.themes : Object.values(presets)
549
- );
550
- const activeName = computed(
551
- () => props.modelValue ?? (theme.currentName.value || list.value[0]?.name || "")
552
- );
553
- const active = computed(
554
- () => list.value.find((t) => t.name === activeName.value) ?? list.value[0]
555
- );
556
- onMounted(() => {
557
- if (props.default == null) return;
558
- const fallback = typeof props.default === "string" ? list.value.find((t) => t.name === props.default) : props.default;
559
- if (fallback) theme.init(fallback);
560
- });
561
- const SIZES = { sm: "size-7", md: "size-8", lg: "size-9" };
562
- const ICON_SIZE = { sm: 15, md: 16, lg: 18 };
563
- const wantsLabel = computed(() => props.showLabel || props.variant === "pill");
564
- const bareIcon = computed(() => props.variant === "icon" && !wantsLabel.value);
565
- function applyTheme2(t, ev) {
566
- if (props.transition) {
567
- theme.setTheme(t, ev ? { x: ev.clientX, y: ev.clientY } : void 0);
568
- } else {
569
- theme.apply(t);
570
- }
571
- emit("update:modelValue", t.name);
572
- emit("change", t);
573
- }
574
- const cycleList = computed(() => {
575
- if (!props.cycleThemes?.length) return list.value;
576
- const resolved = props.cycleThemes.map(
577
- (t) => typeof t === "string" ? list.value.find((x) => x.name === t) : t
578
- ).filter((t) => Boolean(t));
579
- return resolved.length ? resolved : list.value;
580
- });
581
- function cycle(ev) {
582
- const arr = cycleList.value;
583
- if (!arr.length) return;
584
- const i = arr.findIndex((t) => t.name === activeName.value);
585
- const next = arr[(i + 1) % arr.length];
586
- if (next) applyTheme2(next, ev);
587
- }
588
- const menu = computed(
589
- () => list.value.map((t) => ({
590
- label: t.name,
591
- icon: t.name === activeName.value ? "lucide:check" : t.mode === "dark" ? "lucide:moon" : "lucide:sun",
592
- onSelect: () => applyTheme2(t)
593
- }))
594
- );
595
- const hydrated = ref(false);
596
- onMounted(() => {
597
- hydrated.value = true;
598
- });
599
- const labelName = computed(
600
- () => hydrated.value ? activeName.value : list.value[0]?.name ?? ""
601
- );
602
- const triggerLabel = computed(
603
- () => props["aria-label"] ?? `Theme: ${labelName.value}. Click to switch, right-click to choose.`
604
- );
605
- return (_ctx, _cache) => {
606
- return openBlock(), createBlock(_sfc_main$1, { items: menu.value }, {
607
- default: withCtx(() => [
608
- createElementVNode("button", {
609
- type: "button",
610
- "aria-label": triggerLabel.value,
611
- title: triggerLabel.value,
612
- class: normalizeClass([
613
- "inline-flex items-center justify-center gap-2 rounded-control outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring",
614
- bareIcon.value ? [SIZES[__props.size], "text-muted hover:bg-surface-soft hover:text-ink"] : [
615
- "border border-line bg-surface-raised px-1.5 text-ink hover:border-line-strong",
616
- wantsLabel.value ? "py-1 pr-2.5" : ""
617
- ]
618
- ]),
619
- onClick: cycle
620
- }, [
621
- __props.variant !== "icon" ? (openBlock(), createElementBlock("span", {
622
- key: 0,
623
- class: normalizeClass(["grid shrink-0 place-items-center rounded-control border border-line/60", SIZES[__props.size]]),
624
- style: normalizeStyle({ background: active.value?.colors.surface })
625
- }, [
626
- createElementVNode("span", {
627
- class: "size-3 rounded-full",
628
- style: normalizeStyle({ background: active.value?.colors.brand })
629
- }, null, 4)
630
- ], 6)) : (openBlock(), createElementBlock("span", {
631
- key: 1,
632
- class: normalizeClass(["grid shrink-0 place-items-center", SIZES[__props.size]])
633
- }, [
634
- createVNode(_sfc_main$2, {
635
- name: active.value?.mode === "dark" ? "lucide:moon" : "lucide:sun",
636
- size: ICON_SIZE[__props.size]
637
- }, null, 8, ["name", "size"])
638
- ], 2)),
639
- wantsLabel.value ? (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(labelName.value), 1)) : createCommentVNode("", true)
640
- ], 10, _hoisted_1)
641
- ]),
642
- _: 1
643
- }, 8, ["items"]);
644
- };
645
- }
646
- });
647
598
  export {
648
599
  DEFAULT_SURFACE as D,
600
+ GLASS_BACKDROP_ATTR as G,
649
601
  NO_BACKDROP_ATTR as N,
650
602
  THEME_COOKIE as T,
651
- _sfc_main as _,
652
603
  parseTheme as a,
653
604
  amber as b,
654
605
  applyTheme as c,
655
606
  applyThemeWithTransition as d,
656
607
  bootstrapTheme as e,
657
- dark as f,
658
- detectBackdropFilter as g,
659
- light as h,
608
+ cacheSystemThemes as f,
609
+ dark as g,
610
+ detectBackdropFilter as h,
660
611
  isBrokenBackdropEngine as i,
661
612
  lime as j,
662
- themeToCssRule as k,
663
- leavepulse as l,
664
- themeToCssVars as m,
613
+ normalizeTheme as k,
614
+ light as l,
615
+ prefersDarkScheme as m,
665
616
  nord as n,
617
+ setGlassBackdrop as o,
666
618
  presets as p,
619
+ themeFromCookie as q,
667
620
  rose as r,
668
621
  serializeTheme as s,
669
- themeFromCookie as t,
622
+ themeEntries as t,
670
623
  useTheme as u,
671
- violet as v
624
+ themeToCssRule as v,
625
+ themeToCssVars as w,
626
+ violet as x
672
627
  };
@@ -1 +1 @@
1
- export declare const COMPONENT_NAMES: readonly ["LayoutCanvas", "LayoutNode", "LpActionBar", "LpAddressInput", "LpAlert", "LpAppShell", "LpAutocomplete", "LpAvatar", "LpBadge", "LpBreadcrumbs", "LpButton", "LpCalendar", "LpCard", "LpChart", "LpCheckbox", "LpCodeBlock", "LpColorPicker", "LpCommandPalette", "LpConfirmDialog", "LpContextMenu", "LpDatePicker", "LpDisclosure", "LpDivider", "LpDrawer", "LpDropdownMenu", "LpDropzone", "LpEmptyState", "LpFileTree", "LpFileTreeNode", "LpFormField", "LpIcon", "LpImageEditor", "LpInfraNode", "LpInput", "LpLaneNode", "LpLightbox", "LpLink", "LpLogViewer", "LpMapPicker", "LpMediaGallery", "LpModal", "LpModalNav", "LpNotificationBell", "LpNumberField", "LpNumberFlow", "LpOtpInput", "LpPagination", "LpPasswordInput", "LpPhoneInput", "LpPie", "LpPopover", "LpProgress", "LpRadio", "LpRadioGroup", "LpRollingText", "LpScrollArea", "LpSection", "LpSegmented", "LpSelect", "LpServiceNode", "LpShift", "LpShortcutsDialog", "LpSidebar", "LpSidebarNav", "LpSkeleton", "LpSlider", "LpSparkline", "LpStat", "LpStepper", "LpSwitch", "LpTable", "LpTableOfContents", "LpTabs", "LpTextarea", "LpThemeSwitcher", "LpTilt", "LpTimeField", "LpToaster", "LpTooltip", "LpTopologyCanvas", "LpUptimeBar", "LpWaypointEdge"];
1
+ export declare const COMPONENT_NAMES: readonly ["LayoutCanvas", "LpActionBar", "LpAddressInput", "LpAlert", "LpAppShell", "LpAutocomplete", "LpAvatar", "LpBadge", "LpBreadcrumbs", "LpButton", "LpCalendar", "LpCard", "LpChart", "LpCheckbox", "LpCodeBlock", "LpColorPicker", "LpCommandPalette", "LpConfirmDialog", "LpConfirmHost", "LpContextMenu", "LpDatePicker", "LpDateRangePicker", "LpDisclosure", "LpDivider", "LpDrawer", "LpDropdownMenu", "LpDropzone", "LpEmptyState", "LpFieldNotice", "LpFileTree", "LpFormField", "LpIcon", "LpImageEditor", "LpInfraNode", "LpInput", "LpLightbox", "LpLink", "LpLogViewer", "LpMapPicker", "LpMediaGallery", "LpModal", "LpModalNav", "LpNotificationBell", "LpNumberField", "LpNumberFlow", "LpOtpInput", "LpPagination", "LpPasswordInput", "LpPhoneInput", "LpPie", "LpPopover", "LpProgress", "LpRadio", "LpRadioGroup", "LpRangeCalendar", "LpRollingText", "LpScrollArea", "LpSection", "LpSegmented", "LpSelect", "LpServiceNode", "LpShift", "LpShortcutsDialog", "LpSidebar", "LpSkeleton", "LpSlider", "LpSparkline", "LpStat", "LpStepper", "LpSwitch", "LpTable", "LpTableOfContents", "LpTabs", "LpTagsInput", "LpTextarea", "LpThemeProvider", "LpThemeSwitcher", "LpTilt", "LpTimeField", "LpToaster", "LpTooltip", "LpTooltipProvider", "LpTopologyCanvas", "LpUptimeBar"];
@@ -0,0 +1,8 @@
1
+ import type { ContextMenuItemDef } from "./LpContextMenu.vue";
2
+ type __VLS_Props = {
3
+ items: ContextMenuItemDef[];
4
+ panel: string;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import { _ as _sfc_main } from "../chunks/ContextMenuItems-BtKU7074.js";
2
+ export {
3
+ _sfc_main as default
4
+ };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LayoutCanvas-Dd20boUG.js";
1
+ import { _ as _sfc_main } from "../chunks/LayoutCanvas-BkaGXTjx.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -21,6 +21,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
21
21
  "remove-block": (leafId: string, index: number) => any;
22
22
  "reorder-tab": (leafId: string, from: number, to: number) => any;
23
23
  resize: (parent: Split, index: number, deltaFraction: number) => any;
24
+ "resize-start": () => any;
25
+ "resize-end": () => any;
24
26
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
25
27
  onDragstart?: ((id: string) => any) | undefined;
26
28
  onDragend?: (() => any) | undefined;
@@ -29,6 +31,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
29
31
  "onRemove-block"?: ((leafId: string, index: number) => any) | undefined;
30
32
  "onReorder-tab"?: ((leafId: string, from: number, to: number) => any) | undefined;
31
33
  onResize?: ((parent: Split, index: number, deltaFraction: number) => any) | undefined;
34
+ "onResize-start"?: (() => any) | undefined;
35
+ "onResize-end"?: (() => any) | undefined;
32
36
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
37
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
34
38
  declare const _default: typeof __VLS_export;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LayoutNode-DGpZA9LX.js";
1
+ import { _ as _sfc_main } from "../chunks/LayoutNode-B3_9E1Xa.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -55,6 +55,9 @@ type __VLS_Props = {
55
55
  maxWidth?: string;
56
56
  /** Accessible name for the landmark. Falls back to `title`. */
57
57
  ariaLabel?: string;
58
+ labels?: Partial<{
59
+ dismiss: string;
60
+ }>;
58
61
  };
59
62
  declare var __VLS_18: {}, __VLS_20: {};
60
63
  type __VLS_Slots = {} & {
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpActionBar-BlvtGB2P.js";
1
+ import { _ as _sfc_main } from "../chunks/LpActionBar-CnfFVIwC.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };