@leavepulse/ui 0.72.1 → 0.72.3

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 (142) hide show
  1. package/dist/chunks/{DropzoneLinkField-DpOB20Lx.js → DropzoneLinkField-CvyzXHdc.js} +2 -2
  2. package/dist/chunks/{FieldWrapper-DHhRxO5G.js → FieldWrapper-DeOZzjBM.js} +1 -1
  3. package/dist/chunks/{LpActionBar-BqicINE_.js → LpActionBar-DZP0IpXS.js} +2 -2
  4. package/dist/chunks/{LpAddressInput-CkbKLufb.js → LpAddressInput-q8Vu3M8z.js} +3 -3
  5. package/dist/chunks/{LpAlert-BigMdAbu.js → LpAlert-CGeYc3fe.js} +2 -2
  6. package/dist/chunks/{LpAppShell-DIMy-vjP.js → LpAppShell-oB-QWu74.js} +4 -4
  7. package/dist/chunks/{LpBadge-Huo8EKew.js → LpBadge-BVDOfrqI.js} +1 -1
  8. package/dist/chunks/{LpBottomNav-BZIpahzA.js → LpBottomNav-w_5LKno0.js} +1 -1
  9. package/dist/chunks/{LpBreadcrumbs-DGtpBhWt.js → LpBreadcrumbs-DJvcYVPM.js} +1 -1
  10. package/dist/chunks/{LpButton-CW34A1e4.js → LpButton-Cse4COe7.js} +1 -1
  11. package/dist/chunks/{LpCard-B0sFXQzc.js → LpCard-BoB-UqzE.js} +1 -1
  12. package/dist/chunks/{LpCheckbox-iaD63DEF.js → LpCheckbox-B6lfW2GC.js} +1 -1
  13. package/dist/chunks/{LpCodeBlock-CFFa_pJb.js → LpCodeBlock-BjptdRIt.js} +1 -1
  14. package/dist/chunks/{LpCodeDisplay-CFmGMAmP.js → LpCodeDisplay-BkVeLcLM.js} +4 -4
  15. package/dist/chunks/{LpConfirmDialog-BDystNtm.js → LpConfirmDialog-DqsrdJSK.js} +1 -1
  16. package/dist/chunks/{LpConfirmHost-oOsxJHfQ.js → LpConfirmHost-BT8iDrWb.js} +1 -1
  17. package/dist/chunks/{LpCopyButton-BNcGbVXF.js → LpCopyButton-DhptBlXE.js} +1 -1
  18. package/dist/chunks/{LpCountdown-Cak7cq3X.js → LpCountdown-9QnxUFXk.js} +1 -1
  19. package/dist/chunks/{LpDataList-B6Meb4M9.js → LpDataList-_D19wjXa.js} +1 -1
  20. package/dist/chunks/{LpEditable-BNogo5DL.js → LpEditable-BdjKjOMG.js} +2 -2
  21. package/dist/chunks/{LpFileTree-CHgtVh14.js → LpFileTree-Cnw35H2X.js} +1 -1
  22. package/dist/chunks/{LpFileTreeNode-LqHgHd3B.js → LpFileTreeNode-DR3YPYFb.js} +3 -3
  23. package/dist/chunks/{LpFormField-CC57DdTi.js → LpFormField-CjnOXjFq.js} +1 -1
  24. package/dist/chunks/{LpHintLayer-CvAj4aa6.js → LpHintLayer-DWWn7Xm2.js} +2 -2
  25. package/dist/chunks/{LpHints-BtRvHQQ0.js → LpHints-Ctl4p_tS.js} +3 -3
  26. package/dist/chunks/{LpInfraNode-CxngdQAG.js → LpInfraNode-CZrDvfnL.js} +2 -2
  27. package/dist/chunks/{LpInput-DqmL-438.js → LpInput-D9uwTIqP.js} +1 -1
  28. package/dist/chunks/{LpLightbox-7YP6zSDm.js → LpLightbox-DlNPihiz.js} +2 -2
  29. package/dist/chunks/{LpLoader-CUo1MX_0.js → LpLoader-DBVl6KDH.js} +1 -1
  30. package/dist/chunks/{LpLogViewer-DQOIsnZ1.js → LpLogViewer-By_fmDpN.js} +3 -3
  31. package/dist/chunks/{LpMapPicker-Dm3vJHN2.js → LpMapPicker-CmuOTS7N.js} +1 -1
  32. package/dist/chunks/{LpMediaGallery-znEbvIEo.js → LpMediaGallery-Dh5ONZt1.js} +1 -1
  33. package/dist/chunks/{LpModalNav-CH1UE9Ch.js → LpModalNav-CThPOPAF.js} +2 -2
  34. package/dist/chunks/{LpNotificationBell-CrywodQ_.js → LpNotificationBell-674IgUph.js} +3 -3
  35. package/dist/chunks/{LpPaletteTheme-BzHBh-mN.js → LpPaletteTheme-hsYXczIM.js} +3 -3
  36. package/dist/chunks/{LpPasswordInput-DVgRgTVx.js → LpPasswordInput-DNCvyY6N.js} +2 -2
  37. package/dist/chunks/{LpPie-BjDbeytx.js → LpPie-DCpGXbRS.js} +2 -2
  38. package/dist/chunks/{LpPipeline-zZUj7I6K.js → LpPipeline-wh1SzEHF.js} +2 -2
  39. package/dist/chunks/{LpRepeater-BQB0twJ5.js → LpRepeater-BnOQXjWo.js} +2 -2
  40. package/dist/chunks/{LpScramble-DbQyBjUY.js → LpScramble-INTKwGsY.js} +1 -1
  41. package/dist/chunks/{LpSecretField-uoD6Fngf.js → LpSecretField-Ck0Mx6xx.js} +6 -6
  42. package/dist/chunks/{LpShift-C-UGuKMN.js → LpShift-DLU4_TFf.js} +6 -7
  43. package/dist/chunks/{LpSidebar-DXdbvgM6.js → LpSidebar-DVPinvaL.js} +2 -2
  44. package/dist/chunks/{LpSidebarNav-CE6CVCb0.js → LpSidebarNav-BBj2_6jV.js} +2 -2
  45. package/dist/chunks/{LpSidebarRow-CF9VFZ2w.js → LpSidebarRow-C81reNEm.js} +1 -1
  46. package/dist/chunks/{LpStat-CjpXrC8R.js → LpStat-tq-f6ZzL.js} +1 -1
  47. package/dist/chunks/{LpStatus-g-8z9b_u.js → LpStatus-Chbh_JJr.js} +2 -2
  48. package/dist/chunks/{LpStepMark-DU7xalwW.js → LpStepMark-C064WOYG.js} +1 -1
  49. package/dist/chunks/{LpStepper-CbRXiXNs.js → LpStepper-B15etK5F.js} +1 -1
  50. package/dist/chunks/{LpSwap-Xi4j9PR_.js → LpSwap-BA5fh77B.js} +1 -1
  51. package/dist/chunks/{LpSwitch-BWcXEahf.js → LpSwitch-ByaxQKEm.js} +1 -1
  52. package/dist/chunks/{LpTabFace-CG0VqD8I.js → LpTabFace-Dcj2cO6x.js} +1 -1
  53. package/dist/chunks/{LpTableFilter-CYtK9GsF.js → LpTableFilter-CT8Xml_m.js} +3 -3
  54. package/dist/chunks/{LpTagsInput-D1RzCwb5.js → LpTagsInput-CSv62X4B.js} +2 -2
  55. package/dist/chunks/{LpTextarea-MdIzNTjw.js → LpTextarea-Blv8qdz0.js} +1 -1
  56. package/dist/chunks/{LpThemeStudio-B0Kk1bX0.js → LpThemeStudio-DYQP_qbp.js} +2 -2
  57. package/dist/chunks/{LpThemeSwitcher-CI4I7ygL.js → LpThemeSwitcher-BGIVrM1l.js} +2 -2
  58. package/dist/chunks/{LpToaster-C-P1nmMS.js → LpToaster-CmmqSF2o.js} +2 -2
  59. package/dist/chunks/{LpTopologyCanvas-CbEZhsP1.js → LpTopologyCanvas-Bq-k5tgI.js} +1 -1
  60. package/dist/chunks/{LpTour-DRyzgpjt.js → LpTour-BU4JX3RU.js} +1 -1
  61. package/dist/chunks/{LpTruncate-4WvCWqnW.js → LpTruncate-Cb7MDTD7.js} +1 -1
  62. package/dist/chunks/{LpUptimeBar-B2LNSNxs.js → LpUptimeBar-Cdq76qi_.js} +2 -2
  63. package/dist/chunks/{RevealToggle-jBLJwVwO.js → RevealToggle-DhL7mi-3.js} +1 -1
  64. package/dist/chunks/{TourCard-BOBcGbEo.js → TourCard-Dvo_vH_P.js} +3 -3
  65. package/dist/components/DropzoneLinkField.vue.js +1 -1
  66. package/dist/components/FieldWrapper.vue.js +1 -1
  67. package/dist/components/LpActionBar.vue.js +1 -1
  68. package/dist/components/LpAddressInput.vue.js +1 -1
  69. package/dist/components/LpAlert.vue.js +1 -1
  70. package/dist/components/LpAppShell.vue.js +1 -1
  71. package/dist/components/LpBadge.vue.js +1 -1
  72. package/dist/components/LpBottomNav.vue.js +1 -1
  73. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  74. package/dist/components/LpButton.vue.js +1 -1
  75. package/dist/components/LpCard.vue.js +1 -1
  76. package/dist/components/LpChart.vue.js +2 -2
  77. package/dist/components/LpCheckbox.vue.js +1 -1
  78. package/dist/components/LpCodeBlock.vue.js +1 -1
  79. package/dist/components/LpCodeDisplay.vue.js +1 -1
  80. package/dist/components/LpCommandPalette.vue.d.ts +1 -1
  81. package/dist/components/LpCommandPalette.vue.js +2 -2
  82. package/dist/components/LpConfirmDialog.vue.js +1 -1
  83. package/dist/components/LpConfirmHost.vue.js +1 -1
  84. package/dist/components/LpCopyButton.vue.js +1 -1
  85. package/dist/components/LpCountdown.vue.js +1 -1
  86. package/dist/components/LpDataList.vue.js +1 -1
  87. package/dist/components/LpDropzone.vue.js +1 -1
  88. package/dist/components/LpEditable.vue.js +1 -1
  89. package/dist/components/LpFileTree.vue.js +1 -1
  90. package/dist/components/LpFileTreeNode.vue.js +1 -1
  91. package/dist/components/LpFormField.vue.js +1 -1
  92. package/dist/components/LpHintLayer.vue.js +1 -1
  93. package/dist/components/LpHints.vue.js +1 -1
  94. package/dist/components/LpImageEditor.vue.js +1 -1
  95. package/dist/components/LpInfraNode.vue.js +1 -1
  96. package/dist/components/LpInput.vue.js +1 -1
  97. package/dist/components/LpLightbox.vue.js +1 -1
  98. package/dist/components/LpLoader.vue.js +1 -1
  99. package/dist/components/LpLogViewer.vue.js +1 -1
  100. package/dist/components/LpMapPicker.vue.js +1 -1
  101. package/dist/components/LpMediaGallery.vue.js +1 -1
  102. package/dist/components/LpModalNav.vue.js +1 -1
  103. package/dist/components/LpNotificationBell.vue.js +1 -1
  104. package/dist/components/LpPaletteTheme.vue.js +1 -1
  105. package/dist/components/LpPasswordInput.vue.js +1 -1
  106. package/dist/components/LpPie.vue.js +1 -1
  107. package/dist/components/LpPipeline.vue.js +1 -1
  108. package/dist/components/LpRepeater.vue.js +1 -1
  109. package/dist/components/LpScramble.vue.js +1 -1
  110. package/dist/components/LpSecretField.vue.js +1 -1
  111. package/dist/components/LpShift.vue.js +1 -1
  112. package/dist/components/LpSidebar.vue.js +1 -1
  113. package/dist/components/LpSidebarNav.vue.js +1 -1
  114. package/dist/components/LpSidebarRow.vue.js +1 -1
  115. package/dist/components/LpStat.vue.js +1 -1
  116. package/dist/components/LpStatus.vue.js +1 -1
  117. package/dist/components/LpStepMark.vue.js +1 -1
  118. package/dist/components/LpStepper.vue.js +1 -1
  119. package/dist/components/LpSwap.vue.js +1 -1
  120. package/dist/components/LpSwitch.vue.js +1 -1
  121. package/dist/components/LpTabFace.vue.js +1 -1
  122. package/dist/components/LpTable.vue.js +6 -6
  123. package/dist/components/LpTableFilter.vue.js +1 -1
  124. package/dist/components/LpTabs.vue.js +1 -1
  125. package/dist/components/LpTagsInput.vue.js +1 -1
  126. package/dist/components/LpTextarea.vue.js +1 -1
  127. package/dist/components/LpThemeStudio.vue.js +1 -1
  128. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  129. package/dist/components/LpToaster.vue.js +1 -1
  130. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  131. package/dist/components/LpTour.vue.js +1 -1
  132. package/dist/components/LpTruncate.vue.js +1 -1
  133. package/dist/components/LpUptimeBar.vue.js +1 -1
  134. package/dist/components/RevealToggle.vue.js +1 -1
  135. package/dist/components/TourCard.vue.js +1 -1
  136. package/dist/composables/useToast.d.ts +2 -0
  137. package/dist/composables/useToast.js +12 -2
  138. package/dist/index.js +55 -55
  139. package/package.json +1 -1
  140. package/src/components/LpShift.vue +9 -8
  141. package/src/components/LpToaster.vue +1 -1
  142. package/src/composables/useToast.ts +21 -1
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpSidebar-DXdbvgM6.js";
1
+ import { _ as _sfc_main } from "../chunks/LpSidebar-DVPinvaL.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpSidebarNav-CE6CVCb0.js";
1
+ import { _ as _sfc_main } from "../chunks/LpSidebarNav-BBj2_6jV.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpSidebarRow-CF9VFZ2w.js";
1
+ import { _ as _sfc_main } from "../chunks/LpSidebarRow-C81reNEm.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpStat-CjpXrC8R.js";
1
+ import { _ as _sfc_main } from "../chunks/LpStat-tq-f6ZzL.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpStatus-g-8z9b_u.js";
1
+ import { _ as _sfc_main } from "../chunks/LpStatus-Chbh_JJr.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpStepMark-DU7xalwW.js";
1
+ import { _ as _sfc_main } from "../chunks/LpStepMark-C064WOYG.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpStepper-CbRXiXNs.js";
1
+ import { _ as _sfc_main } from "../chunks/LpStepper-B15etK5F.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpSwap-Xi4j9PR_.js";
1
+ import { _ as _sfc_main } from "../chunks/LpSwap-BA5fh77B.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpSwitch-BWcXEahf.js";
1
+ import { _ as _sfc_main } from "../chunks/LpSwitch-ByaxQKEm.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpTabFace-CG0VqD8I.js";
1
+ import { _ as _sfc_main } from "../chunks/LpTabFace-Dcj2cO6x.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,19 +1,19 @@
1
1
  import { defineComponent, computed, useAttrs, ref, shallowRef, watch, onMounted, onBeforeUnmount, useId, h, openBlock, createElementBlock, normalizeClass, createVNode, withCtx, createTextVNode, toDisplayString, createCommentVNode, Fragment, renderList, createBlock, createElementVNode, Transition, renderSlot, mergeProps, normalizeStyle, TransitionGroup, unref, withModifiers, nextTick } from "vue";
2
2
  import { usePaletteScope, suppressPaletteDiscovery, usePaletteCommands } from "../composables/usePaletteCommands.js";
3
3
  import { menuPaletteCommands } from "./commandPalette.js";
4
- import { _ as _sfc_main$1 } from "../chunks/LpDataList-B6Meb4M9.js";
5
- import { _ as _sfc_main$9 } from "../chunks/LpCheckbox-iaD63DEF.js";
4
+ import { _ as _sfc_main$1 } from "../chunks/LpDataList-_D19wjXa.js";
5
+ import { _ as _sfc_main$9 } from "../chunks/LpCheckbox-B6lfW2GC.js";
6
6
  import { _ as _sfc_main$8 } from "../chunks/LpContextMenu-rx2tCjwk.js";
7
7
  import { _ as _sfc_main$d } from "../chunks/LpEmptyState-EQHiRYhG.js";
8
- import { _ as _sfc_main$5 } from "../chunks/LpBadge-Huo8EKew.js";
8
+ import { _ as _sfc_main$5 } from "../chunks/LpBadge-BVDOfrqI.js";
9
9
  import { _ as _sfc_main$3 } from "../chunks/LpIcon--5WSb3jJ.js";
10
10
  import { _ as _sfc_main$c } from "../chunks/LpSkeleton-BB6XIV-w.js";
11
11
  import { _ as _sfc_main$e } from "../chunks/LpPagination-BIIiYHXR.js";
12
12
  import { _ as _sfc_main$a } from "../chunks/LpPopover-DmZ3wUtP.js";
13
13
  import { _ as _sfc_main$7 } from "../chunks/LpScrollArea-Hz3-JWUG.js";
14
14
  import { _ as _sfc_main$6 } from "../chunks/LpRollingText-B54Pje7P.js";
15
- import { _ as _sfc_main$4 } from "../chunks/LpShift-C-UGuKMN.js";
16
- import { _ as _sfc_main$b } from "../chunks/LpTableFilter-CYtK9GsF.js";
15
+ import { _ as _sfc_main$4 } from "../chunks/LpShift-DLU4_TFf.js";
16
+ import { _ as _sfc_main$b } from "../chunks/LpTableFilter-CT8Xml_m.js";
17
17
  import { useKitStorage } from "../composables/usePersisted.js";
18
18
  import { useAsyncTask } from "../composables/useAsyncTask.js";
19
19
  import { useTableFacets } from "./tableFacets.js";
@@ -23,7 +23,7 @@ import { useRovingFocus } from "../composables/useRovingFocus.js";
23
23
  import { useLabels } from "../composables/useLpConfig.js";
24
24
  import { useResizeObserver } from "../composables/useResizeObserver.js";
25
25
  import { compareValues } from "./tableSort.js";
26
- import { _ as _sfc_main$2 } from "../chunks/LpButton-CW34A1e4.js";
26
+ import { _ as _sfc_main$2 } from "../chunks/LpButton-Cse4COe7.js";
27
27
  import { toCsv, downloadFile, fileStem } from "./exportData.js";
28
28
  import { summarizeShown, parseTableState, serializeTableState } from "./tableFilter.js";
29
29
  import { resolveRowMenu } from "./tableRowMenu.js";
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpTableFilter-CYtK9GsF.js";
1
+ import { _ as _sfc_main } from "../chunks/LpTableFilter-CT8Xml_m.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -6,7 +6,7 @@ import { usePillTransition } from "../composables/usePillTransition.js";
6
6
  import { prefersReducedMotion } from "../composables/easing.js";
7
7
  import { _ as _sfc_main$1 } from "../chunks/LpContextMenu-rx2tCjwk.js";
8
8
  import { _ as _sfc_main$3 } from "../chunks/LpSkeleton-BB6XIV-w.js";
9
- import { _ as _sfc_main$2 } from "../chunks/LpTabFace-CG0VqD8I.js";
9
+ import { _ as _sfc_main$2 } from "../chunks/LpTabFace-Dcj2cO6x.js";
10
10
  import { pickTab, BOTTOM_BAR, BOTTOM_ITEM, BOTTOM_MARKER } from "./tabs.js";
11
11
  import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
12
12
  import '../assets/LpTabs-CDchzoRL.css';const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpTagsInput-D1RzCwb5.js";
1
+ import { _ as _sfc_main } from "../chunks/LpTagsInput-CSv62X4B.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpTextarea-MdIzNTjw.js";
1
+ import { _ as _sfc_main } from "../chunks/LpTextarea-Blv8qdz0.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpThemeStudio-B0Kk1bX0.js";
1
+ import { _ as _sfc_main } from "../chunks/LpThemeStudio-DYQP_qbp.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpThemeSwitcher-CI4I7ygL.js";
1
+ import { _ as _sfc_main } from "../chunks/LpThemeSwitcher-BGIVrM1l.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpToaster-C-P1nmMS.js";
1
+ import { _ as _sfc_main } from "../chunks/LpToaster-CmmqSF2o.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpTopologyCanvas-CbEZhsP1.js";
1
+ import { _ as _sfc_main } from "../chunks/LpTopologyCanvas-Bq-k5tgI.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpTour-DRyzgpjt.js";
1
+ import { _ as _sfc_main } from "../chunks/LpTour-BU4JX3RU.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpTruncate-4WvCWqnW.js";
1
+ import { _ as _sfc_main } from "../chunks/LpTruncate-Cb7MDTD7.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpUptimeBar-B2LNSNxs.js";
1
+ import { _ as _sfc_main } from "../chunks/LpUptimeBar-Cdq76qi_.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/RevealToggle-jBLJwVwO.js";
1
+ import { _ as _sfc_main } from "../chunks/RevealToggle-DhL7mi-3.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/TourCard-BOBcGbEo.js";
1
+ import { _ as _sfc_main } from "../chunks/TourCard-Dvo_vH_P.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -21,6 +21,8 @@ export interface ToastItem {
21
21
  onClick?: () => void | Promise<void>;
22
22
  /** Copied with the message, not shown: what a bug report needs (request, status, ids). */
23
23
  details?: string;
24
+ /** Page and moment an error toast came up, copied last: "it broke" rarely says where or when. */
25
+ context?: string;
24
26
  }
25
27
  export interface ToastOptions {
26
28
  /**
@@ -5,9 +5,18 @@ function detailsOf(source, depth = 0) {
5
5
  if (typeof details === "string" && details) return details;
6
6
  return detailsOf(cause, depth + 1);
7
7
  }
8
+ function traceOf(source) {
9
+ if (!(source instanceof Error)) return void 0;
10
+ const head = `${source.name}: ${source.message}`;
11
+ const frames = (source.stack ?? "").split("\n").filter((line) => line.trim() && line.trim() !== head);
12
+ const own = [head, ...frames].join("\n");
13
+ const inner = traceOf(source.cause);
14
+ return inner ? `${own}
15
+ Caused by ${inner}` : own;
16
+ }
8
17
  function split(message, options) {
9
18
  const text = typeof message === "string" ? message : message.message;
10
- const details = options.details ?? (typeof message === "string" ? void 0 : detailsOf(message)) ?? detailsOf(options.cause);
19
+ const details = options.details ?? (typeof message === "string" ? void 0 : detailsOf(message)) ?? detailsOf(options.cause) ?? traceOf(typeof message === "string" ? options.cause : message);
11
20
  return [text, { ...options, details }];
12
21
  }
13
22
  const DEFAULT_DURATION = 4500;
@@ -29,7 +38,8 @@ function push(variant, input, given = {}) {
29
38
  dismissAt: duration > 0 ? Date.now() + duration : null,
30
39
  actions: options.actions,
31
40
  onClick: options.onClick,
32
- details: options.details
41
+ details: options.details,
42
+ context: variant === "error" ? [globalThis.location?.href, (/* @__PURE__ */ new Date()).toISOString()].filter(Boolean).join(" · ") : void 0
33
43
  };
34
44
  const same = options.key === void 0 ? -1 : queue.findIndex((t) => t.key === options.key);
35
45
  const existing = queue[same];
package/dist/index.js CHANGED
@@ -1,22 +1,22 @@
1
1
  import { _ } from "./chunks/LayoutCanvas-CNOAUk7D.js";
2
- import { _ as _2 } from "./chunks/LpAddressInput-CkbKLufb.js";
3
- import { _ as _3 } from "./chunks/LpMapPicker-Dm3vJHN2.js";
2
+ import { _ as _2 } from "./chunks/LpAddressInput-q8Vu3M8z.js";
3
+ import { _ as _3 } from "./chunks/LpMapPicker-CmuOTS7N.js";
4
4
  import { OSM_TILES, createNominatimProvider, emptyAddress, formatAddress, project, tileUrl, unproject } from "./components/address.js";
5
- import { _ as _4 } from "./chunks/LpActionBar-BqicINE_.js";
6
- import { _ as _5 } from "./chunks/LpAlert-BigMdAbu.js";
7
- import { _ as _6 } from "./chunks/LpAppShell-DIMy-vjP.js";
5
+ import { _ as _4 } from "./chunks/LpActionBar-DZP0IpXS.js";
6
+ import { _ as _5 } from "./chunks/LpAlert-CGeYc3fe.js";
7
+ import { _ as _6 } from "./chunks/LpAppShell-oB-QWu74.js";
8
8
  import { _ as _7 } from "./chunks/LpAutocomplete-DOu7FN5P.js";
9
9
  import { _ as _8 } from "./chunks/LpAvatar-Cg6Az3wz.js";
10
- import { _ as _9 } from "./chunks/LpBadge-Huo8EKew.js";
11
- import { _ as _10 } from "./chunks/LpBreadcrumbs-DGtpBhWt.js";
12
- import { _ as _11 } from "./chunks/LpButton-CW34A1e4.js";
10
+ import { _ as _9 } from "./chunks/LpBadge-BVDOfrqI.js";
11
+ import { _ as _10 } from "./chunks/LpBreadcrumbs-DJvcYVPM.js";
12
+ import { _ as _11 } from "./chunks/LpButton-Cse4COe7.js";
13
13
  import { _ as _12 } from "./chunks/LpCalendar-CuoWks-0.js";
14
- import { _ as _13 } from "./chunks/LpCard-B0sFXQzc.js";
14
+ import { _ as _13 } from "./chunks/LpCard-BoB-UqzE.js";
15
15
  import { default as default2 } from "./components/LpChart.vue.js";
16
16
  import { backgroundOf, csvField, downloadFile, fileStem, inlineSvg, resolveCssColor, svgToPng, toCsv } from "./components/exportData.js";
17
17
  import { CHART_PALETTE, axisTicks, chartSummary, formatTick, markerIndex, niceScale, resolveSlices } from "./components/chart.js";
18
- import { _ as _14 } from "./chunks/LpCheckbox-iaD63DEF.js";
19
- import { _ as _15 } from "./chunks/LpCodeBlock-CFFa_pJb.js";
18
+ import { _ as _14 } from "./chunks/LpCheckbox-B6lfW2GC.js";
19
+ import { _ as _15 } from "./chunks/LpCodeBlock-BjptdRIt.js";
20
20
  import { tokenizeLines } from "./components/codeHighlight.js";
21
21
  import { _ as _16 } from "./chunks/LpColorPicker-1y1QJHZR.js";
22
22
  import { DEFAULT_SWATCHES, clampHsv, formatColor, hsvToHsl, hsvToRgb, isLight, normalizeHue, opaqueCss, parseColor, parseHex, rgbToHex, rgbToHsv } from "./components/color.js";
@@ -30,8 +30,8 @@ import { default as default6 } from "./components/LpPaletteStats.vue.js";
30
30
  import { default as default7 } from "./components/LpPaletteSwatches.vue.js";
31
31
  import { default as default8 } from "./components/LpKeys.vue.js";
32
32
  import { comboKeys, comboSteps } from "./components/keys.js";
33
- import { _ as _18 } from "./chunks/LpConfirmDialog-BDystNtm.js";
34
- import { _ as _19 } from "./chunks/LpConfirmHost-oOsxJHfQ.js";
33
+ import { _ as _18 } from "./chunks/LpConfirmDialog-DqsrdJSK.js";
34
+ import { _ as _19 } from "./chunks/LpConfirmHost-BT8iDrWb.js";
35
35
  import { confirm, useConfirm } from "./components/confirm.js";
36
36
  import { _ as _20 } from "./chunks/LpContextMenu-rx2tCjwk.js";
37
37
  import { _ as _21 } from "./chunks/LpDatePicker-CA0QTfBC.js";
@@ -44,31 +44,31 @@ import { _ as _26 } from "./chunks/LpDrawer-RRamxbLV.js";
44
44
  import { _ as _27 } from "./chunks/LpDropdownMenu-Dl7Z4ZhS.js";
45
45
  import { default as default9 } from "./components/LpDropzone.vue.js";
46
46
  import { _ as _28 } from "./chunks/LpEmptyState-EQHiRYhG.js";
47
- import { _ as _29 } from "./chunks/LpFileTree-CHgtVh14.js";
47
+ import { _ as _29 } from "./chunks/LpFileTree-Cnw35H2X.js";
48
48
  import { ancestorIds, checkStateOf, checkedCount, computeStats, fileIcon, formatModified, formatSize, sortNodes, subtreeIds, subtreeSize } from "./components/fileTree.js";
49
49
  import { _ as _30 } from "./chunks/LpFieldNotice-CzQ2_5rQ.js";
50
- import { _ as _31 } from "./chunks/LpFormField-CC57DdTi.js";
50
+ import { _ as _31 } from "./chunks/LpFormField-CjnOXjFq.js";
51
51
  import { _ as _32 } from "./chunks/LpIcon--5WSb3jJ.js";
52
52
  import { i, b, a, c } from "./chunks/icons-DMITlfw5.js";
53
53
  import { default as default10 } from "./components/LpImageEditor.vue.js";
54
- import { _ as _33 } from "./chunks/LpInfraNode-CxngdQAG.js";
55
- import { _ as _34 } from "./chunks/LpInput-DqmL-438.js";
56
- import { _ as _35 } from "./chunks/LpLightbox-7YP6zSDm.js";
54
+ import { _ as _33 } from "./chunks/LpInfraNode-CZrDvfnL.js";
55
+ import { _ as _34 } from "./chunks/LpInput-D9uwTIqP.js";
56
+ import { _ as _35 } from "./chunks/LpLightbox-DlNPihiz.js";
57
57
  import { fileNameOf } from "./components/lightbox.js";
58
58
  import { _ as _36 } from "./chunks/LpLink-Krkjhe_y.js";
59
- import { _ as _37 } from "./chunks/LpLogViewer-DQOIsnZ1.js";
59
+ import { _ as _37 } from "./chunks/LpLogViewer-By_fmDpN.js";
60
60
  import { countLevels, matchPositions, matchesTerm, ringWindow, stepMatch } from "./components/logSearch.js";
61
- import { _ as _38 } from "./chunks/LpMediaGallery-znEbvIEo.js";
61
+ import { _ as _38 } from "./chunks/LpMediaGallery-Dh5ONZt1.js";
62
62
  import { _ as _39 } from "./chunks/LpModal-BnjZ2iem.js";
63
- import { _ as _40 } from "./chunks/LpModalNav-CH1UE9Ch.js";
64
- import { _ as _41 } from "./chunks/LpNotificationBell-CrywodQ_.js";
63
+ import { _ as _40 } from "./chunks/LpModalNav-CThPOPAF.js";
64
+ import { _ as _41 } from "./chunks/LpNotificationBell-674IgUph.js";
65
65
  import { _ as _42 } from "./chunks/LpNumberField-e0IBkWU1.js";
66
66
  import { _ as _43 } from "./chunks/LpTimeField-BawSVsmt.js";
67
67
  import { _ as _44 } from "./chunks/LpNumberFlow-CcxEGUy0.js";
68
68
  import { _ as _45 } from "./chunks/LpOtpInput-CeBPsM7D.js";
69
69
  import { _ as _46 } from "./chunks/LpPagination-BIIiYHXR.js";
70
- import { _ as _47 } from "./chunks/LpPasswordInput-DVgRgTVx.js";
71
- import { _ as _48 } from "./chunks/LpPie-BjDbeytx.js";
70
+ import { _ as _47 } from "./chunks/LpPasswordInput-DNCvyY6N.js";
71
+ import { _ as _48 } from "./chunks/LpPie-DCpGXbRS.js";
72
72
  import { _ as _49 } from "./chunks/LpPhoneInput-CETEp5W7.js";
73
73
  import { filterCountries, flagEmoji, loadCountries, matchCountryByValue } from "./components/countries.js";
74
74
  import { _ as _50 } from "./chunks/LpPopover-DmZ3wUtP.js";
@@ -82,41 +82,41 @@ import { _ as _57 } from "./chunks/LpSection-DFK_uoJE.js";
82
82
  import { _ as _58 } from "./chunks/LpSelect-Cxq4yBGd.js";
83
83
  import { fitChips, toggledValues } from "./components/select.js";
84
84
  import { _ as _59 } from "./chunks/LpServiceNode-D8uJ8sGk.js";
85
- import { _ as _60 } from "./chunks/LpShift-C-UGuKMN.js";
86
- import { _ as _61 } from "./chunks/LpSwap-Xi4j9PR_.js";
85
+ import { _ as _60 } from "./chunks/LpShift-DLU4_TFf.js";
86
+ import { _ as _61 } from "./chunks/LpSwap-BA5fh77B.js";
87
87
  import { _ as _62 } from "./chunks/LpHintExample-9Py0wc-L.js";
88
88
  import { default as default11 } from "./components/LpShortcutsDialog.vue.js";
89
- import { _ as _63 } from "./chunks/LpSidebar-DXdbvgM6.js";
89
+ import { _ as _63 } from "./chunks/LpSidebar-DVPinvaL.js";
90
90
  import { _ as _64 } from "./chunks/LpSkeleton-BB6XIV-w.js";
91
91
  import { _ as _65 } from "./chunks/LpSlider-DxYoCJJO.js";
92
92
  import { _ as _66 } from "./chunks/LpRangeSlider-CM-0ZITZ.js";
93
93
  import { _ as _67 } from "./chunks/LpVideoBackdrop-DS1wGv-X.js";
94
94
  import { formatClipTime, isNativeLoop, planLoop, seamProgress, seamReached } from "./components/videoBackdrop.js";
95
95
  import { _ as _68 } from "./chunks/LpSparkline-CExIRDb3.js";
96
- import { _ as _69 } from "./chunks/LpStat-CjpXrC8R.js";
97
- import { _ as _70 } from "./chunks/LpStepper-CbRXiXNs.js";
98
- import { _ as _71 } from "./chunks/LpSwitch-BWcXEahf.js";
96
+ import { _ as _69 } from "./chunks/LpStat-tq-f6ZzL.js";
97
+ import { _ as _70 } from "./chunks/LpStepper-B15etK5F.js";
98
+ import { _ as _71 } from "./chunks/LpSwitch-ByaxQKEm.js";
99
99
  import { default as default12 } from "./components/LpTable.vue.js";
100
100
  import { compareValues } from "./components/tableSort.js";
101
101
  import { resolveRowMenu } from "./components/tableRowMenu.js";
102
102
  import { _ as _72 } from "./chunks/LpTableOfContents-CraicEs4.js";
103
103
  import { default as default13 } from "./components/LpTabs.vue.js";
104
- import { _ as _73 } from "./chunks/LpBottomNav-BZIpahzA.js";
105
- import { _ as _74 } from "./chunks/LpTagsInput-D1RzCwb5.js";
104
+ import { _ as _73 } from "./chunks/LpBottomNav-w_5LKno0.js";
105
+ import { _ as _74 } from "./chunks/LpTagsInput-CSv62X4B.js";
106
106
  import { addTags, splitTags } from "./components/tags.js";
107
- import { _ as _75 } from "./chunks/LpTextarea-MdIzNTjw.js";
108
- import { _ as _76 } from "./chunks/LpThemeSwitcher-CI4I7ygL.js";
107
+ import { _ as _75 } from "./chunks/LpTextarea-Blv8qdz0.js";
108
+ import { _ as _76 } from "./chunks/LpThemeSwitcher-BGIVrM1l.js";
109
109
  import { _ as _77 } from "./chunks/LpTilt-B7KHX1zH.js";
110
- import { _ as _78 } from "./chunks/LpToaster-C-P1nmMS.js";
110
+ import { _ as _78 } from "./chunks/LpToaster-CmmqSF2o.js";
111
111
  import { _ as _79 } from "./chunks/LpTooltip-BcBvIx4z.js";
112
- import { _ as _80 } from "./chunks/LpTour-DRyzgpjt.js";
112
+ import { _ as _80 } from "./chunks/LpTour-BU4JX3RU.js";
113
113
  import { holeOf, openContextMenu, panelsAround } from "./components/tour.js";
114
- import { _ as _81 } from "./chunks/LpHintLayer-CvAj4aa6.js";
115
- import { _ as _82 } from "./chunks/LpHints-BtRvHQQ0.js";
114
+ import { _ as _81 } from "./chunks/LpHintLayer-DWWn7Xm2.js";
115
+ import { _ as _82 } from "./chunks/LpHints-Ctl4p_tS.js";
116
116
  import { HINT_SIGNALS, contextMenuTip, createHintSystem, dropzoneTip, hintKey, hintSummary, hotkeyTip, localHintStorage, noteDropzone, noteHotkeyTarget, paletteTip, provideHintSystem, runningHintSystem, useHintSystem } from "./composables/useHintSystem.js";
117
117
  import { _ as _83 } from "./chunks/LpTooltipProvider-CftjV7Xc.js";
118
- import { _ as _84 } from "./chunks/LpTopologyCanvas-CbEZhsP1.js";
119
- import { _ as _85 } from "./chunks/LpUptimeBar-B2LNSNxs.js";
118
+ import { _ as _84 } from "./chunks/LpTopologyCanvas-Bq-k5tgI.js";
119
+ import { _ as _85 } from "./chunks/LpUptimeBar-Cdq76qi_.js";
120
120
  import { deserializeLayout, serializeLayout } from "./layout/tree.js";
121
121
  import { addLeaf, addTab, countBlocks, countLeaves, makeLayout, moveLeaf, removeBlock, removeLeaf, reorderTab, resizeAt, setActiveTab } from "./layout/tree.js";
122
122
  import { blockTitle, defineBlocks } from "./layout/registry.js";
@@ -124,7 +124,7 @@ import { layoutController, useLayout } from "./layout/useLayout.js";
124
124
  import { a as parseTheme, s as serializeTheme } from "./chunks/LpThemeProvider-8MG6yqU9.js";
125
125
  import { D, _ as _86, T, b as b2, c as c2, d, e, f, g, l, h, n, i as i2, j, p, r, k, t, m, o, q, u, v } from "./chunks/LpThemeProvider-8MG6yqU9.js";
126
126
  import { G, N, d as d2, i as i3, s } from "./chunks/backdrop-Dkf2vM81.js";
127
- import { _ as _87, a as a2, b as b3, c as c3, d as d3, S, e as e2, u as u2, w } from "./chunks/LpThemeStudio-B0Kk1bX0.js";
127
+ import { _ as _87, a as a2, b as b3, c as c3, d as d3, S, e as e2, u as u2, w } from "./chunks/LpThemeStudio-DYQP_qbp.js";
128
128
  import { useClipboard } from "./composables/useClipboard.js";
129
129
  import { activeShortcuts, appleModifierLabel, findHotkeyConflicts, hotkeyConflicts, hotkeySteps, isAppleKeyboard, matchesHotkey, mergeShortcutGroups, parseCombo, pendingHotkey, sequenceProgress, useAppleKeyboard, useHotkeys } from "./composables/useHotkeys.js";
130
130
  import { anyModalOpen, topModalElement, useModalLayer } from "./components/modalDepth.js";
@@ -163,10 +163,10 @@ import { useToast } from "./composables/useToast.js";
163
163
  import { _ as _88 } from "./chunks/LpFrame-BVQCQLDI.js";
164
164
  import { _ as _89 } from "./chunks/LpThemeStudioSection-B7bt8Iyg.js";
165
165
  import { isInternalHref, resolveLink } from "./components/link.js";
166
- import { _ as _90 } from "./chunks/LpRepeater-BQB0twJ5.js";
166
+ import { _ as _90 } from "./chunks/LpRepeater-BnOQXjWo.js";
167
167
  import { _ as _91 } from "./chunks/LpGauge-BO1PYYqD.js";
168
168
  import { _ as _92 } from "./chunks/LpQuota-B12yijdB.js";
169
- import { _ as _93 } from "./chunks/LpStatus-g-8z9b_u.js";
169
+ import { _ as _93 } from "./chunks/LpStatus-Chbh_JJr.js";
170
170
  import { _ as _94 } from "./chunks/LpRelativeTime-DwgCb5-8.js";
171
171
  import { _ as _95 } from "./chunks/LpActivityLine-CJvzrNpj.js";
172
172
  import { TONE_COLOR, TONE_SOFT, arcPath, capacityThresholds, meterFraction, toneAt } from "./components/meter.js";
@@ -175,20 +175,20 @@ import { formatAmount, quotaSegments, quotaState } from "./components/quota.js";
175
175
  import { compactNumber, decimalMark, formatBytes } from "./components/format.js";
176
176
  import { STATUS_LABELS, STATUS_LOOK } from "./components/status.js";
177
177
  import { formatRelativeTime } from "./components/relativeTime.js";
178
- import { _ as _96 } from "./chunks/LpPipeline-zZUj7I6K.js";
179
- import { _ as _97 } from "./chunks/LpStepMark-DU7xalwW.js";
178
+ import { _ as _96 } from "./chunks/LpPipeline-wh1SzEHF.js";
179
+ import { _ as _97 } from "./chunks/LpStepMark-C064WOYG.js";
180
180
  import { childProgress, connectorFilled, currentStepIndex, isSettled, overallStatus, stepElapsed } from "./components/pipeline.js";
181
- import { _ as _98 } from "./chunks/LpLoader-CUo1MX_0.js";
181
+ import { _ as _98 } from "./chunks/LpLoader-DBVl6KDH.js";
182
182
  import { useLoadingGate } from "./composables/useLoadingGate.js";
183
183
  import { useNow } from "./composables/useNow.js";
184
- import { _ as _99 } from "./chunks/LpCountdown-Cak7cq3X.js";
184
+ import { _ as _99 } from "./chunks/LpCountdown-9QnxUFXk.js";
185
185
  import { DEFAULT_MILESTONES, DEFAULT_UNIT_LABELS, ceilToSecond, crossedMilestone, formatElapsed, formatTime, msToNextSecond, splitTime, timeParts } from "./components/timeSpan.js";
186
- import { _ as _100 } from "./chunks/LpCopyButton-BNcGbVXF.js";
187
- import { _ as _101 } from "./chunks/LpSecretField-uoD6Fngf.js";
188
- import { _ as _102 } from "./chunks/LpDataList-B6Meb4M9.js";
189
- import { _ as _103 } from "./chunks/LpEditable-BNogo5DL.js";
190
- import { _ as _104 } from "./chunks/LpTruncate-4WvCWqnW.js";
191
- import { _ as _105 } from "./chunks/LpCodeDisplay-CFmGMAmP.js";
186
+ import { _ as _100 } from "./chunks/LpCopyButton-DhptBlXE.js";
187
+ import { _ as _101 } from "./chunks/LpSecretField-Ck0Mx6xx.js";
188
+ import { _ as _102 } from "./chunks/LpDataList-_D19wjXa.js";
189
+ import { _ as _103 } from "./chunks/LpEditable-BdjKjOMG.js";
190
+ import { _ as _104 } from "./chunks/LpTruncate-Cb7MDTD7.js";
191
+ import { _ as _105 } from "./chunks/LpCodeDisplay-BkVeLcLM.js";
192
192
  import { formatRemaining, groupCode, middleTruncate, normalizeCode } from "./components/fieldText.js";
193
193
  import { _ as _106 } from "./chunks/LpHoverCard-spGxyw7T.js";
194
194
  import { _ as _107 } from "./chunks/LpIdenticon-BzdC_qz9.js";
@@ -200,7 +200,7 @@ import { pseudoLocalize } from "./composables/pseudoLocale.js";
200
200
  import { _ as _110 } from "./chunks/LpTextReveal-CtAnOUkp.js";
201
201
  import { _ as _111 } from "./chunks/LpShinyText-DX2ajtWq.js";
202
202
  import { _ as _112 } from "./chunks/LpTypewriter-BCL_a6wE.js";
203
- import { _ as _113 } from "./chunks/LpScramble-DbQyBjUY.js";
203
+ import { _ as _113 } from "./chunks/LpScramble-INTKwGsY.js";
204
204
  import { useScramble } from "./composables/useScramble.js";
205
205
  import { useInView } from "./composables/useInView.js";
206
206
  import { SCRAMBLE_GLYPHS, graphemes, planScramble, randomGlyph, scrambleFrame, seededRandom, settledCells } from "./components/scramble.js";
@@ -217,7 +217,7 @@ import { spotlightPoint, useSpotlight } from "./composables/useSpotlight.js";
217
217
  import { _ as _119 } from "./chunks/LpCommandScope-BlKcgBnK.js";
218
218
  import { createPaletteRegistry, mergePaletteCommands, usePaletteCommands, vPalette } from "./composables/usePaletteCommands.js";
219
219
  import { u as u3 } from "./chunks/palette-Cvxl_1tM.js";
220
- import { _ as _120 } from "./chunks/LpPaletteTheme-BzHBh-mN.js";
220
+ import { _ as _120 } from "./chunks/LpPaletteTheme-hsYXczIM.js";
221
221
  const UI_CONFIG_VERSION = 1;
222
222
  function serializeConfig(config) {
223
223
  const out = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leavepulse/ui",
3
- "version": "0.72.1",
3
+ "version": "0.72.3",
4
4
  "type": "module",
5
5
  "description": "LeavePulse token-driven Vue component kit.",
6
6
  "repository": {
@@ -101,8 +101,6 @@ const EASE = "cubic-bezier(0.2, 0, 0, 1)"
101
101
  const GHOST = "data-lp-shift-ghost"
102
102
 
103
103
  interface Seen {
104
- from: number
105
- top: number
106
104
  width: number
107
105
  height: number
108
106
  x: number
@@ -124,12 +122,9 @@ function elementsOf(box: HTMLElement): Element[] {
124
122
  }
125
123
 
126
124
  function remember(box: HTMLElement) {
127
- const outer = box.getBoundingClientRect()
128
125
  for (const node of elementsOf(box)) {
129
126
  const r = node.getBoundingClientRect()
130
127
  seen.set(node, {
131
- from: props.anchor === "end" ? outer.right - r.right : r.left - outer.left,
132
- top: r.top - outer.top,
133
128
  width: r.width,
134
129
  height: r.height,
135
130
  x: r.left,
@@ -149,14 +144,21 @@ function ghost(box: HTMLElement, node: Element) {
149
144
  copy.inert = true
150
145
  Object.assign(copy.style, {
151
146
  position: "absolute",
152
- top: `${at.top}px`,
153
- [props.anchor === "end" ? "right" : "left"]: `${at.from}px`,
147
+ left: "0px",
148
+ top: "0px",
154
149
  width: `${at.width}px`,
155
150
  height: `${at.height}px`,
156
151
  margin: "0",
157
152
  pointerEvents: "none",
158
153
  })
159
154
  box.appendChild(copy)
155
+ // The box is not made a positioning context (content inside it may centre
156
+ // itself against an ancestor further out), so the clone is placed against
157
+ // whatever it is positioned from: put at that origin, measured, and moved
158
+ // by the difference to where the element was last seen.
159
+ const origin = copy.getBoundingClientRect()
160
+ copy.style.left = `${at.x - origin.left}px`
161
+ copy.style.top = `${at.y - origin.top}px`
160
162
  copy
161
163
  .animate(
162
164
  [
@@ -269,7 +271,6 @@ defineExpose({ resizing })
269
271
  // instead of letting the easing edge clip them.
270
272
  resizing && axis !== 'height' ? '[&>*]:shrink-0' : '',
271
273
  resizing && anchor === 'end' ? 'justify-end' : '',
272
- presence ? 'relative' : '',
273
274
  ]"
274
275
  >
275
276
  <slot :resizing="resizing" />
@@ -204,7 +204,7 @@ async function settle(t: ToastItem, run: () => void | Promise<void>) {
204
204
  */
205
205
  const copyable = (t: ToastItem) => t.variant === "error" || t.variant === "warning"
206
206
  // Read on click rather than bound, so a toast whose text is updated in place copies what it now says.
207
- const toastText = (t: ToastItem) => () => [t.title, t.message, t.details].filter(Boolean).join("\n")
207
+ const toastText = (t: ToastItem) => () => [t.title, t.message, t.details, t.context].filter(Boolean).join("\n")
208
208
 
209
209
  function selecting(): boolean {
210
210
  return Boolean(window.getSelection()?.toString())
@@ -25,6 +25,8 @@ export interface ToastItem {
25
25
  onClick?: () => void | Promise<void>
26
26
  /** Copied with the message, not shown: what a bug report needs (request, status, ids). */
27
27
  details?: string
28
+ /** Page and moment an error toast came up, copied last: "it broke" rarely says where or when. */
29
+ context?: string
28
30
  }
29
31
 
30
32
  export interface ToastOptions {
@@ -61,9 +63,26 @@ function detailsOf(source: unknown, depth = 0): string | undefined {
61
63
  return detailsOf(cause, depth + 1)
62
64
  }
63
65
 
66
+ // A code fault (TypeError and the like) has no request behind it, and its
67
+ // message alone ("x is undefined") says nothing about where it happened: the
68
+ // copy gets its type and stack instead. Firefox and Safari leave the message
69
+ // out of `stack`, Chromium starts with it; the head is written once either way.
70
+ function traceOf(source: unknown): string | undefined {
71
+ if (!(source instanceof Error)) return undefined
72
+ const head = `${source.name}: ${source.message}`
73
+ const frames = (source.stack ?? "").split("\n").filter((line) => line.trim() && line.trim() !== head)
74
+ const own = [head, ...frames].join("\n")
75
+ const inner = traceOf(source.cause)
76
+ return inner ? `${own}\nCaused by ${inner}` : own
77
+ }
78
+
64
79
  function split(message: ToastMessage, options: ToastOptions): [string, ToastOptions] {
65
80
  const text = typeof message === "string" ? message : message.message
66
- const details = options.details ?? (typeof message === "string" ? undefined : detailsOf(message)) ?? detailsOf(options.cause)
81
+ const details =
82
+ options.details ??
83
+ (typeof message === "string" ? undefined : detailsOf(message)) ??
84
+ detailsOf(options.cause) ??
85
+ traceOf(typeof message === "string" ? options.cause : message)
67
86
  return [text, { ...options, details }]
68
87
  }
69
88
 
@@ -101,6 +120,7 @@ function push(
101
120
  actions: options.actions,
102
121
  onClick: options.onClick,
103
122
  details: options.details,
123
+ context: variant === "error" ? [globalThis.location?.href, new Date().toISOString()].filter(Boolean).join(" · ") : undefined,
104
124
  }
105
125
 
106
126
  const same = options.key === undefined ? -1 : queue.findIndex((t) => t.key === options.key)