@leavepulse/ui 0.74.0 → 0.74.2

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/assets/{LpDropzone-Bb1vBTeU.css → LpDropzone-B_qRq1-R.css} +10 -10
  2. package/dist/chunks/{DropzoneLinkField-ppY9xalk.js → DropzoneLinkField-C-9BCGJn.js} +2 -2
  3. package/dist/chunks/{FieldWrapper-y5bKBNxA.js → FieldWrapper-CORPzo9s.js} +1 -1
  4. package/dist/chunks/{LpActionBar-B55msXTr.js → LpActionBar-BP1ld7-S.js} +2 -2
  5. package/dist/chunks/{LpAddressInput-mf_dEpj_.js → LpAddressInput-Al3HT5ey.js} +3 -3
  6. package/dist/chunks/{LpAlert-Cg7oIx1B.js → LpAlert-n5XPAZfv.js} +2 -2
  7. package/dist/chunks/{LpAppShell-D-NtjYlw.js → LpAppShell-CpSSm5WT.js} +4 -4
  8. package/dist/chunks/{LpBadge-0A6sPks3.js → LpBadge-wUYLN4U9.js} +1 -1
  9. package/dist/chunks/{LpBottomNav-Dik-ZcHv.js → LpBottomNav-CbNQQPuL.js} +1 -1
  10. package/dist/chunks/{LpBreadcrumbs-ssZV3_od.js → LpBreadcrumbs-DPdbth-c.js} +1 -1
  11. package/dist/chunks/{LpButton-BgdewXxF.js → LpButton-CFb44IjC.js} +1 -1
  12. package/dist/chunks/{LpCard-BJ59q6hR.js → LpCard-r13WRqox.js} +1 -1
  13. package/dist/chunks/{LpCheckbox-B0kJ-t6T.js → LpCheckbox-Cs4SHaHX.js} +1 -1
  14. package/dist/chunks/{LpCodeBlock-CXR_7t_F.js → LpCodeBlock-DRC8VbXW.js} +1 -1
  15. package/dist/chunks/{LpCodeDisplay-BCghfBFC.js → LpCodeDisplay-CE9TxCA4.js} +4 -4
  16. package/dist/chunks/{LpConfirmDialog-CaA4pAre.js → LpConfirmDialog-DY2VjDji.js} +1 -1
  17. package/dist/chunks/{LpConfirmHost-CBIzALSL.js → LpConfirmHost-DvSZTJ4N.js} +1 -1
  18. package/dist/chunks/{LpCopyButton-Cw-lF7Q3.js → LpCopyButton-xF7wFVoU.js} +1 -1
  19. package/dist/chunks/{LpCountdown-BNNhnQAK.js → LpCountdown-DgeY3cLG.js} +1 -1
  20. package/dist/chunks/{LpDataList-CcAA-rD9.js → LpDataList-Jxyl9H5w.js} +1 -1
  21. package/dist/chunks/{LpEditable-CSuJIPbG.js → LpEditable-Cy6GLbFx.js} +2 -2
  22. package/dist/chunks/{LpFileTree-CxOh3rL2.js → LpFileTree-zIFEgo3I.js} +1 -1
  23. package/dist/chunks/{LpFileTreeNode-9ue2P7ER.js → LpFileTreeNode-cT6BIWvz.js} +3 -3
  24. package/dist/chunks/{LpFormField-BBFg8i2I.js → LpFormField-Ch69Jd-X.js} +1 -1
  25. package/dist/chunks/{LpHintLayer-Db_s9_DL.js → LpHintLayer-CgObdUsM.js} +2 -2
  26. package/dist/chunks/{LpHints-Cxf5GXsx.js → LpHints-Bz-BlaSl.js} +3 -3
  27. package/dist/chunks/{LpInfraNode-6NLxkAnr.js → LpInfraNode-46XOCkfq.js} +2 -2
  28. package/dist/chunks/{LpInput-B2dTt4pc.js → LpInput-Tw-yxT4I.js} +1 -1
  29. package/dist/chunks/{LpLightbox-Coe4OBUl.js → LpLightbox-B95yu22B.js} +2 -2
  30. package/dist/chunks/{LpLoader-DPTNhqLu.js → LpLoader-DVwkOmt9.js} +1 -1
  31. package/dist/chunks/{LpLogViewer-DxiR6Mbd.js → LpLogViewer-D25jM2_I.js} +3 -3
  32. package/dist/chunks/{LpMapPicker-DeJRMfFN.js → LpMapPicker-DRGgh89B.js} +1 -1
  33. package/dist/chunks/{LpMediaGallery-B7Km8N9l.js → LpMediaGallery-Bkram-MO.js} +1 -1
  34. package/dist/chunks/{LpModalNav-BmxEyqOx.js → LpModalNav-DQpV2kdn.js} +2 -2
  35. package/dist/chunks/{LpNotificationBell-u8-ZjRON.js → LpNotificationBell-3244LUVc.js} +3 -3
  36. package/dist/chunks/{LpPaletteTheme-CWAIjBCi.js → LpPaletteTheme-DiLYKQiZ.js} +3 -3
  37. package/dist/chunks/{LpPasswordInput-Ih7Lv43S.js → LpPasswordInput-BkHKQDhM.js} +2 -2
  38. package/dist/chunks/{LpPie-Idujdb3M.js → LpPie-DrZepi0p.js} +2 -2
  39. package/dist/chunks/{LpPipeline-QCZWWB0G.js → LpPipeline-B3aOVOkV.js} +2 -2
  40. package/dist/chunks/{LpRepeater-DghUJ3bc.js → LpRepeater-D7ZmnIYd.js} +2 -2
  41. package/dist/chunks/{LpScramble-DeT_D36q.js → LpScramble-Bn9OoOtC.js} +1 -1
  42. package/dist/chunks/{LpSecretField-osKPNdNT.js → LpSecretField-BbmqM9ye.js} +6 -6
  43. package/dist/chunks/{LpShift-kKUeG9NS.js → LpShift-CCq7dofl.js} +2 -4
  44. package/dist/chunks/{LpSidebar-CR_WKcn2.js → LpSidebar-BoNLKgh-.js} +2 -2
  45. package/dist/chunks/{LpSidebarNav-h3YunOAr.js → LpSidebarNav-Bky8chrv.js} +2 -2
  46. package/dist/chunks/{LpSidebarRow-SjV0Ouhq.js → LpSidebarRow-BRYhNDSo.js} +1 -1
  47. package/dist/chunks/{LpStat-DXqKD1h5.js → LpStat-f2LfDCJ4.js} +1 -1
  48. package/dist/chunks/{LpStatus-DfZREVe0.js → LpStatus-DglxttQ7.js} +2 -2
  49. package/dist/chunks/{LpStepMark-TaAyuNsH.js → LpStepMark-DpzKVyh8.js} +1 -1
  50. package/dist/chunks/{LpStepper-CKSTFzHE.js → LpStepper-DpsocBNJ.js} +1 -1
  51. package/dist/chunks/{LpSwap-KIS24N8W.js → LpSwap-C96c0LWh.js} +1 -1
  52. package/dist/chunks/{LpSwitch-DlZHmj-M.js → LpSwitch-BnXd1llc.js} +1 -1
  53. package/dist/chunks/{LpTabFace-JFJLW0kA.js → LpTabFace-DPCwKkH2.js} +1 -1
  54. package/dist/chunks/{LpTableFilter-47ANnx_a.js → LpTableFilter-CiVBpaq0.js} +3 -3
  55. package/dist/chunks/{LpTagsInput-CHoiid8u.js → LpTagsInput-C-mDG648.js} +2 -2
  56. package/dist/chunks/{LpTextarea-CU7C1pLO.js → LpTextarea-TE-yZv2U.js} +1 -1
  57. package/dist/chunks/{LpThemeStudio-zyOH3dF2.js → LpThemeStudio-BpORDvH6.js} +2 -2
  58. package/dist/chunks/{LpThemeSwitcher-BXJhQYGD.js → LpThemeSwitcher-BnEn_mvf.js} +2 -2
  59. package/dist/chunks/{LpToaster-C1D35SKk.js → LpToaster-IwTXjbbU.js} +1 -1
  60. package/dist/chunks/{LpTopologyCanvas-1OufbBtQ.js → LpTopologyCanvas-B1gIbS0n.js} +1 -1
  61. package/dist/chunks/{LpTour-XshJslGg.js → LpTour-BZq-mUMv.js} +1 -1
  62. package/dist/chunks/{LpTruncate-qgKA-3K3.js → LpTruncate-CflAIwiJ.js} +1 -1
  63. package/dist/chunks/{LpUptimeBar-qhvvmmoI.js → LpUptimeBar-DqNvvMBK.js} +2 -2
  64. package/dist/chunks/{RevealToggle-6MlmohxS.js → RevealToggle-BEit1n6Z.js} +1 -1
  65. package/dist/chunks/{TourCard-BuB-i4kv.js → TourCard-DNclH3u_.js} +3 -3
  66. package/dist/components/DropzoneLinkField.vue.js +1 -1
  67. package/dist/components/FieldWrapper.vue.js +1 -1
  68. package/dist/components/LpActionBar.vue.js +1 -1
  69. package/dist/components/LpAddressInput.vue.js +1 -1
  70. package/dist/components/LpAlert.vue.js +1 -1
  71. package/dist/components/LpAppShell.vue.js +1 -1
  72. package/dist/components/LpBadge.vue.js +1 -1
  73. package/dist/components/LpBottomNav.vue.js +1 -1
  74. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  75. package/dist/components/LpButton.vue.js +1 -1
  76. package/dist/components/LpCard.vue.js +1 -1
  77. package/dist/components/LpChart.vue.js +2 -2
  78. package/dist/components/LpCheckbox.vue.js +1 -1
  79. package/dist/components/LpCodeBlock.vue.js +1 -1
  80. package/dist/components/LpCodeDisplay.vue.js +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 +35 -22
  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/useShift.d.ts +0 -2
  137. package/dist/composables/useShift.js +0 -6
  138. package/dist/index.js +55 -55
  139. package/package.json +1 -1
  140. package/src/components/LpDropzone.vue +21 -2
  141. package/src/components/LpShift.vue +2 -4
  142. package/src/composables/useShift.ts +0 -14
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leavepulse/ui",
3
- "version": "0.74.0",
3
+ "version": "0.74.2",
4
4
  "type": "module",
5
5
  "description": "LeavePulse token-driven Vue component kit.",
6
6
  "repository": {
@@ -406,6 +406,7 @@ let mounted = false
406
406
  onMounted(() => {
407
407
  mounted = true
408
408
  listen(props.pasteTarget)
409
+ measureRadius()
409
410
  })
410
411
  watch(
411
412
  () => props.pasteTarget,
@@ -430,6 +431,22 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(() => [
430
431
  props.animate && !revealed.value ? "lp-dropzone--waiting" : "",
431
432
  ].join(" "))
432
433
 
434
+ // The dashed frame is an SVG rect, which cannot inherit the box's
435
+ // border-radius: a zone rounded by the consumer (`rounded-control`) kept the
436
+ // card's curve on its dashes while the background clipped tighter. The kit's
437
+ // own rounding stays a live token, so a theme that changes it still applies.
438
+ const measuredRadius = ref("")
439
+ const frameRadius = computed(() =>
440
+ rootClass.value.split(/\s+/).includes("rounded-card") || !measuredRadius.value
441
+ ? "var(--radius-card)"
442
+ : measuredRadius.value,
443
+ )
444
+ function measureRadius() {
445
+ const zone = revealAnchor.value as HTMLElement | null
446
+ if (zone) measuredRadius.value = getComputedStyle(zone).borderTopLeftRadius
447
+ }
448
+ watch(rootClass, () => nextTick(measureRadius))
449
+
433
450
  // Overlays open in the window this component renders in (an LpFrame's, inside one).
434
451
  const portalTo = usePortalTarget()
435
452
  // What happens in another document (the page around a frame, or a frame in
@@ -473,7 +490,7 @@ const guardOutside = useOutsideGuard()
473
490
  y="0.5"
474
491
  width="calc(100% - 1px)"
475
492
  height="calc(100% - 1px)"
476
- rx="var(--radius-card)"
493
+ :rx="frameRadius"
477
494
  fill="none"
478
495
  stroke-width="1"
479
496
  stroke-dasharray="6 5"
@@ -526,7 +543,9 @@ const guardOutside = useOutsideGuard()
526
543
  <!-- A zone too narrow for the field (a thumbnail beside its controls)
527
544
  keeps its picture and opens the field under itself instead. -->
528
545
  <PopoverRoot :open="linking && floating" @update:open="(open: boolean) => !open && stopLink(false)">
529
- <PopoverAnchor :reference="revealAnchor ?? undefined" />
546
+ <!-- Positioned by `reference`; its own empty element must not be a flex
547
+ item, or the zone's gap adds a strip under the content. -->
548
+ <PopoverAnchor :reference="revealAnchor ?? undefined" class="hidden" />
530
549
  <PopoverPortal :to="portalTo">
531
550
  <PopoverContent
532
551
  @interact-outside="guardOutside"
@@ -304,10 +304,8 @@ defineExpose({ resizing })
304
304
  resizing ? 'overflow-hidden' : '',
305
305
  // While the box holds a width its content has outgrown, a flex row would
306
306
  // squeeze its children to fit (a button's keys folding into a column)
307
- // instead of letting the easing edge clip them. A single child that is
308
- // itself a wrapping row is laid out at the width the box is heading for,
309
- // or it would break onto a second line until the tween lands.
310
- resizing && axis !== 'height' ? '[&>*]:shrink-0 [&>*:only-child]:min-w-(--lp-shift-to-w)' : '',
307
+ // instead of letting the easing edge clip them.
308
+ resizing && axis !== 'height' ? '[&>*]:shrink-0' : '',
311
309
  resizing && anchor === 'end' ? 'justify-end' : '',
312
310
  ]"
313
311
  >
@@ -62,9 +62,6 @@ export interface UseShift {
62
62
  retune: () => void
63
63
  }
64
64
 
65
- /** Set on the box while it eases its width: where that width will land. */
66
- export const TARGET_WIDTH = "--lp-shift-to-w"
67
-
68
65
  /** Kept in step with the `duration-fast` token the transition utilities use. */
69
66
  const TWEEN_MS = 160
70
67
 
@@ -191,14 +188,8 @@ export function useShift(
191
188
  // its bar re-animated some sixty times a second).
192
189
  if (wantsHeight()) node.style.height = ""
193
190
  if (wantsWidth()) node.style.width = ""
194
- // The content's own width, not the one the last tween held it at: left in
195
- // place, the rounded-up figure fed back into the next measurement and the
196
- // box grew a pixel a frame for good.
197
- node.style.removeProperty(TARGET_WIDTH)
198
191
  const toHeight = wantsHeight() ? node.offsetHeight : 0
199
192
  const toWidth = wantsWidth() ? node.offsetWidth : 0
200
- // offsetWidth is rounded, and content that needs 406.4px wraps at 406.
201
- const exactWidth = wantsWidth() ? Math.ceil(node.getBoundingClientRect().width) : 0
202
193
  restoreScroll(tops)
203
194
  lastHeight = toHeight
204
195
  lastWidth = toWidth
@@ -224,10 +215,6 @@ export function useShift(
224
215
  void node.offsetHeight
225
216
  if (movesHeight) node.style.height = `${toHeight}px`
226
217
  if (movesWidth) node.style.width = `${toWidth}px`
227
- // The width the box is heading for, for content that would otherwise lay
228
- // itself out at every in-between width: a wrapping row inside a widening
229
- // box broke onto a second line for the length of the tween.
230
- if (movesWidth) node.style.setProperty(TARGET_WIDTH, `${exactWidth}px`)
231
218
  restoreScroll(tops)
232
219
 
233
220
  inFlight = true
@@ -246,7 +233,6 @@ export function useShift(
246
233
  // clearing it let the box spread to the window's edges.
247
234
  if (wantsHeight()) node.style.height = ""
248
235
  if (wantsWidth()) node.style.width = ""
249
- node.style.removeProperty(TARGET_WIDTH)
250
236
  // Re-read rather than trusting the target: the layout around may have
251
237
  // moved meanwhile, and the next tween has to start from where it sits.
252
238
  lastHeight = node.offsetHeight