@leavepulse/ui 0.44.0 → 0.45.1

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 (271) hide show
  1. package/README.md +49 -3
  2. package/dist/assets/{LpCommandPalette-DCP5g2ik.css → LpCommandPalette-HzAA4gri.css} +21 -21
  3. package/dist/assets/{LpRollingText-CR1mb0Vt.css → LpRollingText-BGnE6q9j.css} +3 -0
  4. package/dist/assets/{LpShortcutsDialog-ChUyU7oV.css → LpShortcutsDialog-CqYX3yy6.css} +28 -7
  5. package/dist/assets/{LpTable-DDQNdf86.css → LpTable-CPwWxTJS.css} +49 -9
  6. package/dist/chunks/{ContextMenuItems-CrfeNPWT.js → ContextMenuItems-BtKU7074.js} +2 -1
  7. package/dist/chunks/{LayoutCanvas-D-jPOAvg.js → LayoutCanvas-BkaGXTjx.js} +1 -1
  8. package/dist/chunks/{LayoutNode-D8Xy9N-o.js → LayoutNode-B3_9E1Xa.js} +9 -5
  9. package/dist/chunks/{LpActionBar-BbwCF6l5.js → LpActionBar-CnfFVIwC.js} +3 -3
  10. package/dist/chunks/{LpAddressInput-BrOqkZqg.js → LpAddressInput-CJOYGZlI.js} +7 -7
  11. package/dist/chunks/{LpAlert-DkOIjsbq.js → LpAlert-B6ilrM7T.js} +1 -1
  12. package/dist/chunks/{LpAppShell-BUKPcHco.js → LpAppShell-B07Lf48e.js} +4 -4
  13. package/dist/chunks/{LpAutocomplete-DxV3Y9h4.js → LpAutocomplete-C8IgSMsi.js} +2 -1
  14. package/dist/chunks/{LpAvatar-ClBbEYZN.js → LpAvatar-C1XStdOo.js} +3 -3
  15. package/dist/chunks/{LpBreadcrumbs-B8IJgFIc.js → LpBreadcrumbs-CQJd73Gm.js} +1 -1
  16. package/dist/chunks/{LpButton-kqJBHIIb.js → LpButton-CKSwC6Mu.js} +1 -1
  17. package/dist/chunks/{LpCalendar-B7Ko5RdR.js → LpCalendar-DrA2McTU.js} +1 -1
  18. package/dist/chunks/{LpCard-CpRByR0q.js → LpCard-C2IvucmX.js} +1 -1
  19. package/dist/chunks/{LpCheckbox-DpqchzH4.js → LpCheckbox-Bkj13CbW.js} +1 -1
  20. package/dist/chunks/{LpCodeBlock-DeHJPq7p.js → LpCodeBlock-ca7ANFyW.js} +1 -1
  21. package/dist/chunks/{LpColorPicker-Bhf1qxhB.js → LpColorPicker-zz4VGkG4.js} +46 -20
  22. package/dist/chunks/{LpConfirmDialog-CIUOSnWo.js → LpConfirmDialog-BTVAR4tF.js} +3 -3
  23. package/dist/chunks/{LpConfirmHost-CDm0Wtpv.js → LpConfirmHost-Ci_uCHgQ.js} +1 -1
  24. package/dist/chunks/{LpContextMenu-DQw5dGfG.js → LpContextMenu-BqkAYa9X.js} +2 -1
  25. package/dist/chunks/{LpDatePicker-Drirx1AK.js → LpDatePicker-BrdFtSTy.js} +16 -10
  26. package/dist/chunks/LpDateRangePicker-Drd7EbIz.js +210 -0
  27. package/dist/chunks/{LpDisclosure-ChQYmjlR.js → LpDisclosure-Cc23-JOT.js} +1 -1
  28. package/dist/chunks/{LpDrawer-bScx-KMO.js → LpDrawer-CfRhHwmE.js} +3 -3
  29. package/dist/chunks/{LpDropdownMenu-DJpoqRCb.js → LpDropdownMenu-DdJGQzPn.js} +2 -1
  30. package/dist/chunks/{LpEmptyState-Dsdqz1Wj.js → LpEmptyState-BJbZXC8D.js} +1 -1
  31. package/dist/chunks/LpFieldNotice-wtieLUTj.js +64 -0
  32. package/dist/chunks/{LpFileTree-CSI_5SK2.js → LpFileTree-CNurOvkV.js} +3 -3
  33. package/dist/chunks/{LpFileTreeNode-B4MiSQX2.js → LpFileTreeNode-D_qRRdsH.js} +3 -3
  34. package/dist/chunks/{LpFormField-CIk5qosh.js → LpFormField-CtVYj6tO.js} +29 -15
  35. package/dist/chunks/{LpIcon-CCnX5_2j.js → LpIcon-DYtaid0K.js} +20 -6
  36. package/dist/chunks/{LpInput-C0e8y8_d.js → LpInput-D-YGQbEv.js} +39 -16
  37. package/dist/chunks/{LpLightbox-Mr0W_6HK.js → LpLightbox-DSDahF23.js} +1 -1
  38. package/dist/chunks/{LpLogViewer-YBOaFnc_.js → LpLogViewer-KypbgOyo.js} +252 -58
  39. package/dist/chunks/{LpMapPicker-NUzS9e37.js → LpMapPicker-Cc84LaM3.js} +1 -1
  40. package/dist/chunks/{LpMediaGallery-DfJmMW0I.js → LpMediaGallery-YKr-cQPN.js} +2 -2
  41. package/dist/chunks/{LpModal-DPwGKBPv.js → LpModal-BzTVeNqe.js} +3 -3
  42. package/dist/chunks/{LpModalNav-DPg5H9f3.js → LpModalNav-CjABSGCu.js} +14 -8
  43. package/dist/chunks/{LpNotificationBell-t5yn-siX.js → LpNotificationBell-CCwyJP5C.js} +26 -14
  44. package/dist/chunks/{LpNumberField-DWnQKktS.js → LpNumberField-B77O-z28.js} +1 -1
  45. package/dist/chunks/{LpPagination-DFngX7Xo.js → LpPagination-BcDlo3r_.js} +1 -1
  46. package/dist/chunks/{LpPasswordInput-CWVDuBJ5.js → LpPasswordInput-eKzQhbQP.js} +2 -2
  47. package/dist/chunks/{LpPhoneInput-CD-ZTeSd.js → LpPhoneInput-BCbrrhgE.js} +126 -23
  48. package/dist/chunks/{LpPie-BLco31Nx.js → LpPie-BEJ2SfI6.js} +9 -10
  49. package/dist/chunks/{LpPopover-p_e_shN3.js → LpPopover-DCKeqiVn.js} +1 -0
  50. package/dist/chunks/LpRangeCalendar-DZuaRV0W.js +331 -0
  51. package/dist/chunks/{LpRollingText-CM5gkSeF.js → LpRollingText-DB7upf-5.js} +1 -1
  52. package/dist/chunks/{LpScrollArea-D8xyKXcF.js → LpScrollArea-Bry1fdOM.js} +14 -2
  53. package/dist/chunks/{LpSection-aM6J_u51.js → LpSection-tKEH0jYf.js} +1 -1
  54. package/dist/chunks/{LpSegmented-Dejd7cIx.js → LpSegmented-C09EEam2.js} +1 -1
  55. package/dist/chunks/{LpSelect-DrRD9I7L.js → LpSelect-DNIL6MB9.js} +20 -23
  56. package/dist/chunks/{LpSidebar-BgwUNWpJ.js → LpSidebar-Bwws_X29.js} +3 -3
  57. package/dist/chunks/{LpSidebarNav-Bqxz8aWT.js → LpSidebarNav-kx-LdqNU.js} +3 -3
  58. package/dist/chunks/{LpStat-dXtyrdX9.js → LpStat-B-7udBRP.js} +1 -1
  59. package/dist/chunks/{LpStepper-Bk-XaQYU.js → LpStepper-C7XiVKZj.js} +34 -19
  60. package/dist/chunks/{LpSwitch-B1aLKulj.js → LpSwitch-OrcOJX9m.js} +1 -1
  61. package/dist/chunks/LpTableFilter-BV8PpLM9.js +158 -0
  62. package/dist/chunks/{LpTabs-_qMVaZJ6.js → LpTabs-29iW1XOx.js} +1 -1
  63. package/dist/chunks/LpTagsInput-D1SuqbhB.js +300 -0
  64. package/dist/chunks/{LpTextarea-yP8hGedR.js → LpTextarea-uuScWo6-.js} +1 -1
  65. package/dist/chunks/{LpThemeProvider-Wjm7Tuit.js → LpThemeProvider-Be4r2TQX.js} +1 -1
  66. package/dist/chunks/{LpThemeSwitcher-CKLc10KZ.js → LpThemeSwitcher-B4aVPbNC.js} +19 -22
  67. package/dist/chunks/{LpTimeField-C5HRgS5H.js → LpTimeField-Cqe7fXnh.js} +1 -1
  68. package/dist/chunks/{LpToaster--oT6lfhL.js → LpToaster-DTtWuKvq.js} +76 -9
  69. package/dist/chunks/{LpTooltip-CBdzeKNf.js → LpTooltip-CXVKcOXT.js} +3 -2
  70. package/dist/chunks/{LpTopologyCanvas-DocsLal3.js → LpTopologyCanvas-6ozNrQKh.js} +2 -1
  71. package/dist/chunks/{LpUptimeBar-DLtxOMRy.js → LpUptimeBar-ugcv25xj.js} +2 -2
  72. package/dist/chunks/icons-CkA0njzm.js +43 -0
  73. package/dist/chunks/{useTheme-C8JHUlPM.js → useTheme-DJm1JSsY.js} +47 -50
  74. package/dist/component-names.d.ts +1 -1
  75. package/dist/components/ContextMenuItems.vue.js +1 -1
  76. package/dist/components/LayoutCanvas.vue.js +1 -1
  77. package/dist/components/LayoutNode.vue.js +1 -1
  78. package/dist/components/LpActionBar.vue.js +1 -1
  79. package/dist/components/LpAddressInput.vue.js +1 -1
  80. package/dist/components/LpAlert.vue.js +1 -1
  81. package/dist/components/LpAppShell.vue.js +1 -1
  82. package/dist/components/LpAutocomplete.vue.js +1 -1
  83. package/dist/components/LpAvatar.vue.js +1 -1
  84. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  85. package/dist/components/LpButton.vue.d.ts +2 -2
  86. package/dist/components/LpButton.vue.js +1 -1
  87. package/dist/components/LpCalendar.vue.js +1 -1
  88. package/dist/components/LpCard.vue.js +1 -1
  89. package/dist/components/LpChart.vue.d.ts +16 -1
  90. package/dist/components/LpChart.vue.js +63 -5
  91. package/dist/components/LpCheckbox.vue.js +1 -1
  92. package/dist/components/LpCodeBlock.vue.js +1 -1
  93. package/dist/components/LpColorPicker.vue.d.ts +2 -2
  94. package/dist/components/LpColorPicker.vue.js +1 -1
  95. package/dist/components/LpCommandPalette.vue.d.ts +6 -0
  96. package/dist/components/LpCommandPalette.vue.js +62 -11
  97. package/dist/components/LpConfirmDialog.vue.js +1 -1
  98. package/dist/components/LpConfirmHost.vue.js +1 -1
  99. package/dist/components/LpContextMenu.vue.js +1 -1
  100. package/dist/components/LpDatePicker.vue.js +1 -1
  101. package/dist/components/LpDateRangePicker.vue.d.ts +60 -0
  102. package/dist/components/LpDateRangePicker.vue.js +4 -0
  103. package/dist/components/LpDisclosure.vue.js +1 -1
  104. package/dist/components/LpDrawer.vue.js +1 -1
  105. package/dist/components/LpDropdownMenu.vue.js +1 -1
  106. package/dist/components/LpDropzone.vue.js +1 -1
  107. package/dist/components/LpEmptyState.vue.js +1 -1
  108. package/dist/components/LpFieldNotice.vue.d.ts +8 -0
  109. package/dist/components/LpFieldNotice.vue.js +4 -0
  110. package/dist/components/LpFileTree.vue.js +1 -1
  111. package/dist/components/LpFileTreeNode.vue.js +1 -1
  112. package/dist/components/LpFormField.vue.d.ts +4 -1
  113. package/dist/components/LpFormField.vue.js +1 -1
  114. package/dist/components/LpIcon.vue.d.ts +0 -1
  115. package/dist/components/LpIcon.vue.js +1 -1
  116. package/dist/components/LpImageEditor.vue.js +2 -2
  117. package/dist/components/LpInput.vue.d.ts +19 -0
  118. package/dist/components/LpInput.vue.js +1 -1
  119. package/dist/components/LpLightbox.vue.js +1 -1
  120. package/dist/components/LpLogViewer.vue.d.ts +52 -1
  121. package/dist/components/LpLogViewer.vue.js +1 -1
  122. package/dist/components/LpMapPicker.vue.js +1 -1
  123. package/dist/components/LpMediaGallery.vue.js +1 -1
  124. package/dist/components/LpModal.vue.js +1 -1
  125. package/dist/components/LpModalNav.vue.js +1 -1
  126. package/dist/components/LpNotificationBell.vue.js +1 -1
  127. package/dist/components/LpNumberField.vue.js +1 -1
  128. package/dist/components/LpPagination.vue.js +1 -1
  129. package/dist/components/LpPasswordInput.vue.js +1 -1
  130. package/dist/components/LpPhoneInput.vue.d.ts +13 -0
  131. package/dist/components/LpPhoneInput.vue.js +1 -1
  132. package/dist/components/LpPie.vue.js +1 -1
  133. package/dist/components/LpPopover.vue.js +1 -1
  134. package/dist/components/LpProgress.vue.d.ts +1 -1
  135. package/dist/components/LpRangeCalendar.vue.d.ts +51 -0
  136. package/dist/components/LpRangeCalendar.vue.js +4 -0
  137. package/dist/components/LpRollingText.vue.d.ts +1 -1
  138. package/dist/components/LpRollingText.vue.js +1 -1
  139. package/dist/components/LpScrollArea.vue.d.ts +2 -2
  140. package/dist/components/LpScrollArea.vue.js +1 -1
  141. package/dist/components/LpSection.vue.js +1 -1
  142. package/dist/components/LpSegmented.vue.js +1 -1
  143. package/dist/components/LpSelect.vue.js +1 -1
  144. package/dist/components/LpShortcutsDialog.vue.d.ts +6 -0
  145. package/dist/components/LpShortcutsDialog.vue.js +56 -14
  146. package/dist/components/LpSidebar.vue.js +1 -1
  147. package/dist/components/LpSidebarNav.vue.js +1 -1
  148. package/dist/components/LpStat.vue.js +1 -1
  149. package/dist/components/LpStepper.vue.js +1 -1
  150. package/dist/components/LpSwitch.vue.js +1 -1
  151. package/dist/components/LpTable.vue.d.ts +84 -2
  152. package/dist/components/LpTable.vue.js +481 -107
  153. package/dist/components/LpTableFilter.vue.d.ts +31 -0
  154. package/dist/components/LpTableFilter.vue.js +4 -0
  155. package/dist/components/LpTabs.vue.js +1 -1
  156. package/dist/components/LpTagsInput.vue.d.ts +77 -0
  157. package/dist/components/LpTagsInput.vue.js +4 -0
  158. package/dist/components/LpTextarea.vue.js +1 -1
  159. package/dist/components/LpThemeProvider.vue.js +1 -1
  160. package/dist/components/LpThemeSwitcher.vue.d.ts +2 -2
  161. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  162. package/dist/components/LpTimeField.vue.js +1 -1
  163. package/dist/components/LpToaster.vue.d.ts +2 -0
  164. package/dist/components/LpToaster.vue.js +1 -1
  165. package/dist/components/LpTooltip.vue.js +1 -1
  166. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  167. package/dist/components/LpUptimeBar.vue.js +1 -1
  168. package/dist/components/chart.js +3 -2
  169. package/dist/components/commandSearch.js +3 -0
  170. package/dist/components/dateRange.d.ts +43 -0
  171. package/dist/components/dateRange.js +76 -0
  172. package/dist/components/exportData.d.ts +58 -0
  173. package/dist/components/exportData.js +165 -0
  174. package/dist/components/logSearch.d.ts +18 -0
  175. package/dist/components/logSearch.js +36 -0
  176. package/dist/components/phone.d.ts +41 -0
  177. package/dist/components/phone.js +80 -0
  178. package/dist/components/tableFilter.d.ts +36 -0
  179. package/dist/components/tableFilter.js +84 -0
  180. package/dist/components/tags.d.ts +20 -0
  181. package/dist/components/tags.js +37 -0
  182. package/dist/composables/useField.d.ts +4 -0
  183. package/dist/composables/useFieldNotice.d.ts +17 -0
  184. package/dist/composables/useFieldNotice.js +28 -0
  185. package/dist/composables/useForm.d.ts +53 -0
  186. package/dist/composables/useForm.js +207 -0
  187. package/dist/composables/useHotkeys.d.ts +65 -5
  188. package/dist/composables/useHotkeys.js +170 -9
  189. package/dist/composables/useInputMask.d.ts +59 -0
  190. package/dist/composables/useInputMask.js +170 -0
  191. package/dist/composables/useLocale.d.ts +2 -0
  192. package/dist/composables/useLocale.js +9 -0
  193. package/dist/composables/usePaintSelect.d.ts +22 -0
  194. package/dist/composables/usePaintSelect.js +169 -0
  195. package/dist/composables/useShift.js +7 -2
  196. package/dist/icons-all.d.ts +1 -0
  197. package/dist/icons-all.js +3 -0
  198. package/dist/icons.d.ts +14 -1
  199. package/dist/index.d.ts +29 -3
  200. package/dist/index.js +195 -138
  201. package/dist/kit-icons.d.ts +2 -0
  202. package/dist/theme/backdrop.d.ts +12 -0
  203. package/dist/theme/presets.d.ts +0 -2
  204. package/package.json +13 -4
  205. package/src/component-names.ts +4 -0
  206. package/src/components/ContextMenuItems.vue +1 -1
  207. package/src/components/LayoutNode.vue +11 -2
  208. package/src/components/LpActionBar.vue +1 -1
  209. package/src/components/LpAutocomplete.vue +1 -0
  210. package/src/components/LpAvatar.vue +2 -2
  211. package/src/components/LpButton.vue +1 -1
  212. package/src/components/LpChart.vue +80 -1
  213. package/src/components/LpColorPicker.vue +34 -1
  214. package/src/components/LpCommandPalette.vue +82 -8
  215. package/src/components/LpContextMenu.vue +1 -1
  216. package/src/components/LpDatePicker.vue +11 -4
  217. package/src/components/LpDateRangePicker.vue +226 -0
  218. package/src/components/LpDrawer.vue +1 -1
  219. package/src/components/LpDropdownMenu.vue +1 -0
  220. package/src/components/LpFieldNotice.vue +65 -0
  221. package/src/components/LpFormField.vue +33 -4
  222. package/src/components/LpIcon.vue +22 -4
  223. package/src/components/LpInput.vue +46 -6
  224. package/src/components/LpLogViewer.vue +225 -22
  225. package/src/components/LpModal.vue +2 -2
  226. package/src/components/LpModalNav.vue +13 -2
  227. package/src/components/LpNotificationBell.vue +15 -7
  228. package/src/components/LpPhoneInput.vue +179 -20
  229. package/src/components/LpPie.vue +8 -5
  230. package/src/components/LpPopover.vue +1 -0
  231. package/src/components/LpRangeCalendar.vue +365 -0
  232. package/src/components/LpRollingText.vue +3 -0
  233. package/src/components/LpScrollArea.vue +22 -2
  234. package/src/components/LpSelect.vue +0 -0
  235. package/src/components/LpShortcutsDialog.vue +77 -8
  236. package/src/components/LpStepper.vue +23 -10
  237. package/src/components/LpSwitch.vue +1 -1
  238. package/src/components/LpTable.vue +584 -65
  239. package/src/components/LpTableFilter.vue +175 -0
  240. package/src/components/LpTagsInput.vue +364 -0
  241. package/src/components/LpThemeSwitcher.vue +19 -23
  242. package/src/components/LpToaster.vue +91 -5
  243. package/src/components/LpTooltip.vue +9 -2
  244. package/src/components/LpTopologyCanvas.vue +7 -1
  245. package/src/components/chart.ts +5 -3
  246. package/src/components/commandSearch.ts +6 -0
  247. package/src/components/dateRange.ts +134 -0
  248. package/src/components/exportData.ts +228 -0
  249. package/src/components/logSearch.ts +46 -0
  250. package/src/components/phone.ts +140 -0
  251. package/src/components/tableFilter.ts +122 -0
  252. package/src/components/tags.ts +62 -0
  253. package/src/composables/useField.ts +4 -0
  254. package/src/composables/useFieldNotice.ts +59 -0
  255. package/src/composables/useForm.ts +314 -0
  256. package/src/composables/useHotkeys.ts +269 -13
  257. package/src/composables/useInputMask.ts +254 -0
  258. package/src/composables/useLocale.ts +14 -0
  259. package/src/composables/usePaintSelect.ts +243 -0
  260. package/src/composables/useShift.ts +13 -2
  261. package/src/iconSubset.d.mts +10 -0
  262. package/src/iconSubset.mjs +51 -0
  263. package/src/icons-all.ts +10 -0
  264. package/src/icons.ts +59 -8
  265. package/src/index.ts +37 -3
  266. package/src/kit-icons.ts +5 -0
  267. package/src/nuxt.ts +30 -2
  268. package/src/runtime/theme.plugin.ts +2 -2
  269. package/src/theme/backdrop.ts +69 -0
  270. package/src/theme/presets.ts +6 -64
  271. package/src/tokens/tokens.css +53 -4
package/README.md CHANGED
@@ -50,14 +50,14 @@ Themes are JSON token sets applied at runtime. Paint the saved one before the
50
50
  app mounts, so the first frame already has the right colours:
51
51
 
52
52
  ```ts
53
- import { bootstrapTheme, leavepulse, useTheme } from "@leavepulse/ui"
53
+ import { bootstrapTheme, dark, light, nord, useTheme } from "@leavepulse/ui"
54
54
 
55
- bootstrapTheme(leavepulse)
55
+ bootstrapTheme(dark)
56
56
  createApp(App).mount("#app")
57
57
 
58
58
  // later, from a switcher or settings page
59
59
  useTheme().setTheme(nord)
60
- useTheme().setSystem({ light, dark: leavepulse }) // follow the OS colour scheme
60
+ useTheme().setSystem({ light, dark }) // follow the OS colour scheme
61
61
  ```
62
62
 
63
63
  `LpThemeProvider` applies a theme to one subtree only (a dark sidebar in a light
@@ -97,6 +97,52 @@ The module registers every exported component, paints the saved theme during
97
97
  SSR (from the `lp-theme` cookie, no flash), and provides `NuxtLink` as the link
98
98
  component. `theme: false`, `link: false` and `exclude: ["Name"]` opt out.
99
99
 
100
+ ### Icons
101
+
102
+ `<LpIcon name="lucide:check">` renders offline, never through the iconify API.
103
+ The kit registers only the icons its own components use (about 20 KB instead of
104
+ the whole ~540 KB lucide set). Any other lucide name still renders: the full
105
+ collection loads as a separate chunk of your bundle the first time one is
106
+ needed, and an empty box of the same size holds the place until then.
107
+
108
+ Register icons up front when they must be in the server render or must not wait
109
+ for a chunk:
110
+
111
+ ```ts
112
+ import { registerIcons, registerIconCollection } from "@leavepulse/ui"
113
+
114
+ await registerIcons(["lucide:rocket", "lucide:server"]) // from the bundled lucide set
115
+ registerIconCollection(myIconsJson) // any iconify collection
116
+ import "@leavepulse/ui/icons-all" // the whole lucide set, as before
117
+ ```
118
+
119
+ In Nuxt the module does it for you: `icons: "scan"` (default) registers every
120
+ `lucide:*` literal found in the app's source, so they are in the SSR markup;
121
+ `"all"` registers the whole set, `"kit"` only the kit's own, or pass a list.
122
+
123
+ ### Glass on WebKitGTK (Tauri on Linux)
124
+
125
+ WebKitGTK reports `backdrop-filter` as supported and then draws nothing, and on
126
+ some GPUs (NVIDIA with the proprietary driver) it runs without hardware
127
+ acceleration at all. Call `detectBackdropFilter()` once at startup: glass
128
+ panels then turn solid instead of showing the page unblurred.
129
+
130
+ An app that paints its own wallpaper can keep the frosted look there: hand the
131
+ kit the same `background` value and glass panels draw a blurred copy of it,
132
+ aligned to the screen, under their tint.
133
+
134
+ ```ts
135
+ import { detectBackdropFilter, setGlassBackdrop } from "@leavepulse/ui"
136
+
137
+ detectBackdropFilter()
138
+ setGlassBackdrop("url(/wallpaper.jpg) center / cover no-repeat, #0b0f14")
139
+ // A wallpaper blurred ahead of time is cheaper on an engine that blurs on the CPU:
140
+ // setGlassBackdrop("url(/wallpaper-blurred.jpg) center / cover", { filter: "none" })
141
+ ```
142
+
143
+ Only the wallpaper is softened; live content under a panel stays sharp behind
144
+ its tint. Nothing changes in engines where the real blur works.
145
+
100
146
  ### Native scrollbar skin (opt-in)
101
147
 
102
148
  `LpScrollArea` skins the scroll it owns. For everything it can't — the page
@@ -5,81 +5,81 @@
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-7fa6825e] {
8
+ .lp-cmd-dialog[data-v-bb9a3f4c] {
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-7fa6825e] {
13
+ .lp-cmd-split[data-v-bb9a3f4c] {
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-7fa6825e] {
19
+ .lp-cmd-split .lp-cmd-list[data-v-bb9a3f4c] {
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-7fa6825e] {
24
+ .lp-cmd-dialog[data-pane="open"][data-v-bb9a3f4c] {
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-7fa6825e] {
29
+ .lp-cmd-pane[data-v-bb9a3f4c] {
30
30
  width: var(--lp-cmd-pane);
31
31
  }
32
32
  /*
33
33
  * The pane rides in from the right edge while the dialog opens up to it, and
34
34
  * leaves the same way, for as long as the dialog takes to close over it.
35
35
  */
36
- .lp-cmd-pane-enter-active[data-v-7fa6825e],
37
- .lp-cmd-pane-leave-active[data-v-7fa6825e] {
36
+ .lp-cmd-pane-enter-active[data-v-bb9a3f4c],
37
+ .lp-cmd-pane-leave-active[data-v-bb9a3f4c] {
38
38
  transition:
39
39
  transform 300ms var(--ease-emphasized, ease),
40
40
  opacity 300ms ease;
41
41
  }
42
- .lp-cmd-pane-enter-from[data-v-7fa6825e],
43
- .lp-cmd-pane-leave-to[data-v-7fa6825e] {
42
+ .lp-cmd-pane-enter-from[data-v-bb9a3f4c],
43
+ .lp-cmd-pane-leave-to[data-v-bb9a3f4c] {
44
44
  opacity: 0;
45
45
  transform: translateX(40%);
46
46
  }
47
- .lp-cmd-para[data-v-7fa6825e] {
48
- animation: lp-cmd-para-in-7fa6825e 260ms ease-out both;
47
+ .lp-cmd-para[data-v-bb9a3f4c] {
48
+ animation: lp-cmd-para-in-bb9a3f4c 260ms ease-out both;
49
49
  }
50
- @keyframes lp-cmd-para-in-7fa6825e {
50
+ @keyframes lp-cmd-para-in-bb9a3f4c {
51
51
  from {
52
52
  opacity: 0;
53
53
  transform: translateY(4px);
54
54
  }
55
55
  }
56
56
  @media (prefers-reduced-motion: reduce) {
57
- .lp-cmd-split[data-v-7fa6825e],
58
- .lp-cmd-pane-enter-active[data-v-7fa6825e],
59
- .lp-cmd-pane-leave-active[data-v-7fa6825e] {
57
+ .lp-cmd-split[data-v-bb9a3f4c],
58
+ .lp-cmd-pane-enter-active[data-v-bb9a3f4c],
59
+ .lp-cmd-pane-leave-active[data-v-bb9a3f4c] {
60
60
  transition: none;
61
61
  }
62
- .lp-cmd-para[data-v-7fa6825e] {
62
+ .lp-cmd-para[data-v-bb9a3f4c] {
63
63
  animation: none;
64
64
  }
65
65
  }
66
- .lp-cmd-excerpt[data-v-7fa6825e] {
66
+ .lp-cmd-excerpt[data-v-bb9a3f4c] {
67
67
  display: -webkit-box;
68
68
  -webkit-box-orient: vertical;
69
69
  overflow: hidden;
70
70
  }
71
71
  /* Each result eases in; honours reduced motion. */
72
- .lp-cmd-item[data-v-7fa6825e] {
73
- animation: lp-cmd-in-7fa6825e 140ms ease-out both;
72
+ .lp-cmd-item[data-v-bb9a3f4c] {
73
+ animation: lp-cmd-in-bb9a3f4c 140ms ease-out both;
74
74
  }
75
- @keyframes lp-cmd-in-7fa6825e {
75
+ @keyframes lp-cmd-in-bb9a3f4c {
76
76
  from {
77
77
  opacity: 0;
78
78
  transform: translateY(3px);
79
79
  }
80
80
  }
81
81
  @media (prefers-reduced-motion: reduce) {
82
- .lp-cmd-item[data-v-7fa6825e] {
82
+ .lp-cmd-item[data-v-bb9a3f4c] {
83
83
  animation: none;
84
84
  }
85
85
  }
@@ -9,6 +9,9 @@
9
9
  }
10
10
  .lp-roll__item {
11
11
  display: inline-block;
12
+ max-width: 100%;
13
+ overflow: hidden;
14
+ text-overflow: ellipsis;
12
15
  white-space: nowrap;
13
16
  backface-visibility: hidden;
14
17
  }
@@ -1,12 +1,12 @@
1
1
 
2
2
  /* Two columns where there is room: the list is long enough that one column
3
3
  pushes the last group off a laptop screen. */
4
- .shortcut-groups[data-v-b7784bfc] {
4
+ .shortcut-groups[data-v-1c4cf3fa] {
5
5
  display: grid;
6
6
  gap: 18px;
7
7
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
8
8
  }
9
- .shortcut-group h3[data-v-b7784bfc] {
9
+ .shortcut-group h3[data-v-1c4cf3fa] {
10
10
  margin: 0 0 6px;
11
11
  color: var(--color-muted);
12
12
  font-size: 0.7rem;
@@ -14,31 +14,52 @@
14
14
  letter-spacing: 0.06em;
15
15
  text-transform: uppercase;
16
16
  }
17
- .shortcut-group dl[data-v-b7784bfc] {
17
+ .shortcut-group dl[data-v-1c4cf3fa] {
18
18
  display: flex;
19
19
  flex-direction: column;
20
20
  gap: 1px;
21
21
  margin: 0;
22
22
  }
23
- .shortcut-row[data-v-b7784bfc] {
23
+ .shortcut-row[data-v-1c4cf3fa] {
24
24
  display: flex;
25
25
  align-items: center;
26
26
  justify-content: space-between;
27
27
  gap: 12px;
28
28
  padding: 5px 0;
29
29
  }
30
- .shortcut-row dt[data-v-b7784bfc] {
30
+ .shortcut-row dt[data-v-1c4cf3fa] {
31
31
  color: var(--color-ink);
32
32
  font-size: 0.82rem;
33
33
  min-width: 0;
34
34
  }
35
- .shortcut-row dd[data-v-b7784bfc] {
35
+ .shortcut-conflict[data-v-1c4cf3fa] {
36
+ display: inline-flex;
37
+ width: 14px;
38
+ height: 14px;
39
+ margin-left: 6px;
40
+ align-items: center;
41
+ justify-content: center;
42
+ border-radius: 999px;
43
+ background: var(--color-danger-soft);
44
+ color: var(--color-danger);
45
+ font-size: 0.6rem;
46
+ font-weight: 700;
47
+ vertical-align: middle;
48
+ cursor: help;
49
+ }
50
+ .shortcut-then[data-v-1c4cf3fa] {
51
+ align-self: center;
52
+ padding: 0 2px;
53
+ color: var(--color-muted);
54
+ font-size: 0.68rem;
55
+ }
56
+ .shortcut-row dd[data-v-1c4cf3fa] {
36
57
  display: flex;
37
58
  flex-shrink: 0;
38
59
  gap: 3px;
39
60
  margin: 0;
40
61
  }
41
- kbd[data-v-b7784bfc] {
62
+ kbd[data-v-1c4cf3fa] {
42
63
  display: inline-flex;
43
64
  min-width: 20px;
44
65
  align-items: center;
@@ -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-ebce6d15],
15
- .lp-row-leave-active[data-v-ebce6d15] {
14
+ .lp-row-enter-active[data-v-fff7ed10],
15
+ .lp-row-leave-active[data-v-fff7ed10] {
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-ebce6d15] {
20
+ .lp-row-move[data-v-fff7ed10] {
21
21
  transition: transform var(--duration-medium) var(--ease-emphasized);
22
22
  }
23
- .lp-row-enter-from[data-v-ebce6d15],
24
- .lp-row-leave-to[data-v-ebce6d15] {
23
+ .lp-row-enter-from[data-v-fff7ed10],
24
+ .lp-row-leave-to[data-v-fff7ed10] {
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-ebce6d15] {
38
+ .lp-row-empty.lp-row-leave-active[data-v-fff7ed10] {
39
39
  display: none;
40
40
  }
41
41
 
@@ -47,12 +47,52 @@
47
47
  * which is a moment slower and stays a table the whole time.
48
48
  */
49
49
 
50
+ /*
51
+ * The tick column of a hold-to-select table keeps its width and only hides its
52
+ * boxes until they mean something, which is the desktop pattern Material
53
+ * describes: a row's box shows while the row is hovered, and every box shows
54
+ * once anything is selected. An earlier version collapsed the column to nothing
55
+ * and floated the hover box over the first cell, where it sat on the text.
56
+ */
57
+ .lp-tick[data-v-fff7ed10] {
58
+ display: flex;
59
+ align-items: center;
60
+ max-width: 0;
61
+ padding-inline: 0;
62
+ overflow: hidden;
63
+ opacity: 0;
64
+ transition:
65
+ max-width var(--duration-medium) var(--ease-emphasized),
66
+ padding var(--duration-medium) var(--ease-emphasized),
67
+ opacity var(--duration-fast) ease;
68
+ }
69
+ .lp-tick-open[data-v-fff7ed10] {
70
+ max-width: 3.25rem;
71
+ padding-inline: 1rem;
72
+ opacity: 1;
73
+ }
74
+ .lp-tick-hidden[data-v-fff7ed10],
75
+ .lp-tick-cue[data-v-fff7ed10] {
76
+ opacity: 0;
77
+ }
78
+ tr:hover .lp-tick-cue[data-v-fff7ed10],
79
+ .lp-tick-cue[data-v-fff7ed10]:focus-within {
80
+ opacity: 1;
81
+ }
82
+
50
83
  /* A filter that redraws the list is information, not decoration: with motion
51
84
  turned down the rows change without animating rather than not changing. */
85
+ /* Only where there is a hover to reveal it; a finger long-presses instead. */
86
+ @media (hover: none) {
87
+ tr:hover .lp-tick-cue[data-v-fff7ed10] {
88
+ opacity: 0;
89
+ }
90
+ }
52
91
  @media (prefers-reduced-motion: reduce) {
53
- .lp-row-enter-active[data-v-ebce6d15],
54
- .lp-row-leave-active[data-v-ebce6d15],
55
- .lp-row-move[data-v-ebce6d15] {
92
+ .lp-row-enter-active[data-v-fff7ed10],
93
+ .lp-row-leave-active[data-v-fff7ed10],
94
+ .lp-row-move[data-v-fff7ed10],
95
+ .lp-tick[data-v-fff7ed10] {
56
96
  transition: none;
57
97
  }
58
98
  }
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, resolveComponent, openBlock, createElementBlock, Fragment, renderList, createBlock, unref, createCommentVNode, withCtx, createVNode, normalizeClass, createElementVNode, createTextVNode, toDisplayString, withModifiers } from "vue";
2
2
  import { ContextMenuSeparator, ContextMenuSub, ContextMenuSubTrigger, ContextMenuPortal, ContextMenuSubContent, ContextMenuCheckboxItem, ContextMenuItem } from "reka-ui";
3
- import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
3
+ import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
4
4
  const _hoisted_1 = { class: "flex items-center gap-2" };
5
5
  const _hoisted_2 = { class: "flex items-center gap-2" };
6
6
  const _hoisted_3 = {
@@ -57,6 +57,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
57
57
  createVNode(unref(ContextMenuPortal), null, {
58
58
  default: withCtx(() => [
59
59
  createVNode(unref(ContextMenuSubContent), {
60
+ "collision-padding": 8,
60
61
  class: normalizeClass(__props.panel),
61
62
  "side-offset": 2,
62
63
  "align-offset": -4
@@ -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-D8Xy9N-o.js";
2
+ import { _ as _sfc_main$1 } from "./LayoutNode-B3_9E1Xa.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" };
@@ -1,7 +1,7 @@
1
- import { defineComponent, ref, computed, onBeforeUnmount, resolveComponent, openBlock, createElementBlock, normalizeClass, Fragment, renderList, createVNode, normalizeStyle, withCtx, renderSlot, mergeProps, createElementVNode, createCommentVNode, createBlock, unref, withModifiers, toDisplayString } from "vue";
2
- import { Motion } from "motion-v";
1
+ import { defineComponent, computed, ref, onBeforeUnmount, resolveComponent, openBlock, createElementBlock, normalizeClass, Fragment, renderList, createVNode, normalizeStyle, withCtx, renderSlot, mergeProps, createElementVNode, createCommentVNode, createBlock, unref, withModifiers, toDisplayString } from "vue";
2
+ import { useReducedMotion, Motion } from "motion-v";
3
3
  import { blockTitle } from "../layout/registry.js";
4
- import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
4
+ import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
5
5
  const _hoisted_1 = ["onPointerdown"];
6
6
  const _hoisted_2 = {
7
7
  key: 1,
@@ -22,6 +22,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
22
22
  },
23
23
  emits: ["dragstart", "dragend", "drop", "set-active", "remove-block", "reorder-tab", "resize", "resize-start", "resize-end"],
24
24
  setup(__props, { emit: __emit }) {
25
+ const reduceMotion = useReducedMotion();
26
+ const layoutTransition = computed(
27
+ () => reduceMotion.value ? { duration: 0 } : { type: "spring", stiffness: 520, damping: 42, mass: 0.9 }
28
+ );
25
29
  const props = __props;
26
30
  const emit = __emit;
27
31
  const hoverSide = ref(null);
@@ -155,7 +159,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
155
159
  ], 2)) : leaf.value ? (openBlock(), createBlock(unref(Motion), {
156
160
  key: 1,
157
161
  layout: true,
158
- transition: { type: "spring", stiffness: 520, damping: 42, mass: 0.9 },
162
+ transition: layoutTransition.value,
159
163
  class: normalizeClass(["relative flex min-h-0 min-w-0 flex-col", { "opacity-35": __props.dragId === __props.node.id }])
160
164
  }, {
161
165
  default: withCtx(() => [
@@ -228,7 +232,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
228
232
  ], 32)) : createCommentVNode("", true)
229
233
  ]),
230
234
  _: 3
231
- }, 8, ["class"])) : createCommentVNode("", true);
235
+ }, 8, ["transition", "class"])) : createCommentVNode("", true);
232
236
  };
233
237
  }
234
238
  });
@@ -2,8 +2,8 @@ import { defineComponent, useSlots, computed, ref, watch, onBeforeUnmount, openB
2
2
  import { useLabels } from "../composables/useLpConfig.js";
3
3
  import { useBarStack } from "../components/actionBar.js";
4
4
  import { CLOSE_ICON } from "../components/dropdown.js";
5
- import { _ as _sfc_main$2 } from "./LpButton-kqJBHIIb.js";
6
- import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
5
+ import { _ as _sfc_main$2 } from "./LpButton-CKSwC6Mu.js";
6
+ import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
7
7
  const _hoisted_1 = ["aria-label"];
8
8
  const _hoisted_2 = {
9
9
  key: 1,
@@ -92,7 +92,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
92
92
  return (_ctx, _cache) => {
93
93
  return openBlock(), createBlock(Teleport, { to: "body" }, [
94
94
  createVNode(Transition, {
95
- "enter-active-class": "animate-[rise-in_var(--duration-medium)_var(--ease-emphasized)]",
95
+ "enter-active-class": "animate-[rise-in_var(--duration-medium)_var(--ease-emphasized)] motion-reduce:animate-none",
96
96
  "leave-active-class": "animate-[rise-out_var(--duration-fast)_ease_forwards] motion-reduce:animate-none"
97
97
  }, {
98
98
  default: withCtx(() => [
@@ -2,13 +2,13 @@ import { defineComponent, defineAsyncComponent, computed, watch, ref, onMounted,
2
2
  import { useAsyncTask } from "../composables/useAsyncTask.js";
3
3
  import { OSM_TILES, createNominatimProvider, emptyAddress, formatAddress } from "../components/address.js";
4
4
  import { flagEmoji, loadCountries } from "../components/countries.js";
5
- import { _ as _sfc_main$2 } from "./LpAutocomplete-DxV3Y9h4.js";
6
- import { _ as _sfc_main$3 } from "./LpButton-kqJBHIIb.js";
7
- import { _ as _sfc_main$1 } from "./LpFormField-CIk5qosh.js";
8
- import { _ as _sfc_main$4 } from "./LpIcon-CCnX5_2j.js";
9
- import { _ as _sfc_main$5 } from "./LpInput-C0e8y8_d.js";
10
- import { _ as _sfc_main$7 } from "./LpModal-DPwGKBPv.js";
11
- import { _ as _sfc_main$6 } from "./LpSelect-DrRD9I7L.js";
5
+ import { _ as _sfc_main$2 } from "./LpAutocomplete-C8IgSMsi.js";
6
+ import { _ as _sfc_main$3 } from "./LpButton-CKSwC6Mu.js";
7
+ import { _ as _sfc_main$1 } from "./LpFormField-CtVYj6tO.js";
8
+ import { _ as _sfc_main$4 } from "./LpIcon-DYtaid0K.js";
9
+ import { _ as _sfc_main$5 } from "./LpInput-D-YGQbEv.js";
10
+ import { _ as _sfc_main$7 } from "./LpModal-BzTVeNqe.js";
11
+ import { _ as _sfc_main$6 } from "./LpSelect-DNIL6MB9.js";
12
12
  import { useMergedAttrs } from "../composables/useMergedClass.js";
13
13
  const _hoisted_1 = { class: "flex items-stretch gap-2" };
14
14
  const _hoisted_2 = { class: "grid gap-3 sm:grid-cols-[minmax(0,1fr)_10rem]" };
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, createVNode, createElementVNode, toDisplayString, createCommentVNode, renderSlot } from "vue";
2
2
  import { tv } from "tailwind-variants";
3
- import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
3
+ import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
4
4
  const _hoisted_1 = ["role"];
5
5
  const _hoisted_2 = { class: "min-w-0" };
6
6
  const _hoisted_3 = {
@@ -1,10 +1,10 @@
1
1
  import { defineComponent, computed, ref, useId, watch, openBlock, createElementBlock, mergeProps, unref, createElementVNode, withModifiers, toDisplayString, createVNode, createSlots, withCtx, renderSlot, normalizeProps, guardReactiveProps, normalizeClass, createBlock } from "vue";
2
2
  import { useLabels } from "../composables/useLpConfig.js";
3
- import { _ as _sfc_main$2 } from "./LpButton-kqJBHIIb.js";
4
- import { _ as _sfc_main$3 } from "./LpIcon-CCnX5_2j.js";
5
- import { _ as _sfc_main$5 } from "./LpScrollArea-D8xyKXcF.js";
3
+ import { _ as _sfc_main$2 } from "./LpButton-CKSwC6Mu.js";
4
+ import { _ as _sfc_main$3 } from "./LpIcon-DYtaid0K.js";
5
+ import { _ as _sfc_main$5 } from "./LpScrollArea-Bry1fdOM.js";
6
6
  import { _ as _sfc_main$4 } from "./LpShift-DXNsauQZ.js";
7
- import { _ as _sfc_main$1 } from "./LpSidebar-BgwUNWpJ.js";
7
+ import { _ as _sfc_main$1 } from "./LpSidebar-Bwws_X29.js";
8
8
  import { useMergedAttrs } from "../composables/useMergedClass.js";
9
9
  const _hoisted_1 = ["href"];
10
10
  const _hoisted_2 = { class: "flex min-w-0 flex-1 flex-col" };
@@ -4,7 +4,7 @@ import { useFieldControl } from "../composables/useField.js";
4
4
  import { useInputFilter } from "../composables/useInputFilter.js";
5
5
  import { useLabels } from "../composables/useLpConfig.js";
6
6
  import { CLOSE_ICON, POPOVER_PANEL, OPTION_ITEM } from "../components/dropdown.js";
7
- import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
7
+ import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
8
8
  const _hoisted_1 = ["aria-label"];
9
9
  const _hoisted_2 = {
10
10
  key: 0,
@@ -177,6 +177,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
177
177
  createVNode(unref(ComboboxPortal), null, {
178
178
  default: withCtx(() => [
179
179
  createVNode(unref(ComboboxContent), {
180
+ "collision-padding": 8,
180
181
  position: "popper",
181
182
  "side-offset": 6,
182
183
  class: normalizeClass([unref(POPOVER_PANEL), "z-(--z-popover) max-h-72 w-(--reka-combobox-trigger-width) overflow-hidden"]),
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, computed, ref, onMounted, openBlock, createBlock, withCtx, createVNode, unref, mergeProps, createCommentVNode, createTextVNode, toDisplayString } from "vue";
2
2
  import { AvatarRoot, AvatarImage, AvatarFallback } from "reka-ui";
3
3
  import { tv } from "tailwind-variants";
4
- import { _ as _sfc_main$1 } from "./LpContextMenu-DQw5dGfG.js";
4
+ import { _ as _sfc_main$1 } from "./LpContextMenu-BqkAYa9X.js";
5
5
  import { useMergedAttrs } from "../composables/useMergedClass.js";
6
6
  const __default__ = { inheritAttrs: false };
7
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -77,7 +77,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
77
77
  key: 0,
78
78
  src: __props.src,
79
79
  alt: __props.alt,
80
- class: "size-full object-cover"
80
+ class: "size-full object-cover animate-[fade-in_var(--duration-medium)_ease] motion-reduce:animate-none"
81
81
  }, null, 8, ["src", "alt"])) : createCommentVNode("", true),
82
82
  createVNode(unref(AvatarFallback), null, {
83
83
  default: withCtx(() => [
@@ -100,7 +100,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
100
100
  key: 0,
101
101
  src: __props.src,
102
102
  alt: __props.alt,
103
- class: "size-full object-cover"
103
+ class: "size-full object-cover animate-[fade-in_var(--duration-medium)_ease] motion-reduce:animate-none"
104
104
  }, null, 8, ["src", "alt"])) : createCommentVNode("", true),
105
105
  createVNode(unref(AvatarFallback), null, {
106
106
  default: withCtx(() => [
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, computed, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, Fragment, renderList, createBlock, createCommentVNode, resolveDynamicComponent, withCtx, createTextVNode, toDisplayString } from "vue";
2
- import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
2
+ import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
3
3
  import { useLabels, useLinkComponent } from "../composables/useLpConfig.js";
4
4
  import { useMergedAttrs } from "../composables/useMergedClass.js";
5
5
  import { resolveLink } from "../components/link.js";
@@ -22,7 +22,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
22
22
  setup(__props) {
23
23
  const button = tv({
24
24
  base: [
25
- "inline-flex select-none items-center justify-center gap-2 font-semibold",
25
+ "inline-flex select-none items-center justify-center gap-2 whitespace-nowrap font-semibold",
26
26
  "rounded-control transition-[color,background-color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)]",
27
27
  // tactile press: dips slightly on click, springs back on release.
28
28
  "active:scale-[0.97] motion-reduce:active:scale-100",
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, computed, openBlock, createBlock, unref, mergeProps, withCtx, createVNode, normalizeClass, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString } from "vue";
2
2
  import { today, getLocalTimeZone, parseDate } from "@internationalized/date";
3
3
  import { CalendarRoot, CalendarHeader, CalendarPrev, CalendarHeading, CalendarNext, CalendarGrid, CalendarGridHead, CalendarGridRow, CalendarHeadCell, CalendarGridBody, CalendarCell, CalendarCellTrigger } from "reka-ui";
4
- import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
4
+ import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
5
5
  import { useMergedAttrs } from "../composables/useMergedClass.js";
6
6
  const __default__ = { inheritAttrs: false };
7
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, computed, openBlock, createBlock, withCtx, resolveDynamicComponent, mergeProps, unref, renderSlot } from "vue";
2
2
  import { tv } from "tailwind-variants";
3
3
  import { useMergedAttrs } from "../composables/useMergedClass.js";
4
- import { _ as _sfc_main$1 } from "./LpContextMenu-DQw5dGfG.js";
4
+ import { _ as _sfc_main$1 } from "./LpContextMenu-BqkAYa9X.js";
5
5
  const __default__ = { inheritAttrs: false };
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
7
7
  ...__default__,
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, openBlock, createElementBlock, mergeProps, unref, createVNode, withCtx, renderSlot, createTextVNode, toDisplayString } from "vue";
2
2
  import { CheckboxRoot, CheckboxIndicator } from "reka-ui";
3
- import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
3
+ import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
4
4
  import { useFieldControl } from "../composables/useField.js";
5
5
  import { useMergedAttrs } from "../composables/useMergedClass.js";
6
6
  const __default__ = { inheritAttrs: false };
@@ -2,7 +2,7 @@ import { defineComponent, computed, reactive, watch, ref, openBlock, createEleme
2
2
  import { useClipboard } from "../composables/useClipboard.js";
3
3
  import { tokenizeLines } from "../components/codeHighlight.js";
4
4
  import { useLabels } from "../composables/useLpConfig.js";
5
- import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
5
+ import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
6
6
  import { useMergedAttrs } from "../composables/useMergedClass.js";
7
7
  const _hoisted_1 = {
8
8
  key: 0,