@leavepulse/ui 0.45.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/assets/{LpCommandPalette-nGNnzXqQ.css → LpCommandPalette-5miKYsb-.css} +21 -21
  2. package/dist/assets/{LpDropzone-i4BdMi1H.css → LpDropzone-Ev6X03zj.css} +12 -12
  3. package/dist/assets/{LpTable-CPwWxTJS.css → LpTable-BoeA_TgK.css} +17 -17
  4. package/dist/chunks/{LpAddressInput-BwX8uo4_.js → LpAddressInput-iOJhmRzy.js} +1 -1
  5. package/dist/chunks/{LpAppShell-C53_RaGF.js → LpAppShell-BmMYcEVx.js} +2 -2
  6. package/dist/chunks/{LpAvatar-C1XStdOo.js → LpAvatar-DeSb6H0c.js} +1 -1
  7. package/dist/chunks/{LpCard-C2IvucmX.js → LpCard-BdxkMXjo.js} +1 -1
  8. package/dist/chunks/{LpColorPicker-zz4VGkG4.js → LpColorPicker-BLqPX5Vw.js} +1 -1
  9. package/dist/chunks/{LpConfirmDialog-DCw5jR1t.js → LpConfirmDialog-Ca-CTlxT.js} +1 -1
  10. package/dist/chunks/{LpConfirmHost-CbywMpMP.js → LpConfirmHost-BAaSaT2b.js} +1 -1
  11. package/dist/chunks/{LpContextMenu-BqkAYa9X.js → LpContextMenu-1cKew_Dc.js} +17 -4
  12. package/dist/chunks/{LpDatePicker-DuusgT69.js → LpDatePicker-BrdFtSTy.js} +3 -1
  13. package/dist/chunks/{LpDateRangePicker-DHeuznfC.js → LpDateRangePicker-Drd7EbIz.js} +4 -2
  14. package/dist/chunks/{LpDrawer-Dt4aB4Fr.js → LpDrawer-CBFVD624.js} +2 -2
  15. package/dist/chunks/{LpDropdownMenu-DdJGQzPn.js → LpDropdownMenu-DrpJJBp0.js} +22 -8
  16. package/dist/chunks/{LpFileTree-CNurOvkV.js → LpFileTree-bk5VjBey.js} +2 -2
  17. package/dist/chunks/{LpFileTreeNode-D_qRRdsH.js → LpFileTreeNode-BvMSBM7X.js} +1 -1
  18. package/dist/chunks/{LpLogViewer-KypbgOyo.js → LpLogViewer-BDFXzvcl.js} +2 -2
  19. package/dist/chunks/{LpModal-DMMDQHAu.js → LpModal-JNa3B_Lr.js} +13 -6
  20. package/dist/chunks/{LpModalNav-BVPDyIup.js → LpModalNav-BAxC9et7.js} +20 -7
  21. package/dist/chunks/{LpNotificationBell-CCwyJP5C.js → LpNotificationBell-DsqSyMwS.js} +2 -2
  22. package/dist/chunks/{LpPie-BEJ2SfI6.js → LpPie-BdSnta11.js} +1 -1
  23. package/dist/chunks/{LpScrollArea-Bry1fdOM.js → LpScrollArea-Hz3-JWUG.js} +23 -5
  24. package/dist/chunks/{LpSidebar-CQNB0-yU.js → LpSidebar-DpEiGi8L.js} +2 -2
  25. package/dist/chunks/{LpSidebarNav-kx-LdqNU.js → LpSidebarNav-BUuxipX-.js} +2 -2
  26. package/dist/chunks/{LpThemeSwitcher-B4aVPbNC.js → LpThemeSwitcher-BbYFFT5w.js} +1 -1
  27. package/dist/chunks/{LpToaster-DpJvoCOh.js → LpToaster-DTtWuKvq.js} +39 -6
  28. package/dist/chunks/MenuTitle-J3ZDYjpV.js +56 -0
  29. package/dist/components/LpAddressInput.vue.js +1 -1
  30. package/dist/components/LpAppShell.vue.js +1 -1
  31. package/dist/components/LpAvatar.vue.js +1 -1
  32. package/dist/components/LpCard.vue.js +1 -1
  33. package/dist/components/LpChart.vue.js +1 -1
  34. package/dist/components/LpColorPicker.vue.js +1 -1
  35. package/dist/components/LpCommandPalette.vue.js +7 -4
  36. package/dist/components/LpConfirmDialog.vue.js +1 -1
  37. package/dist/components/LpConfirmHost.vue.js +1 -1
  38. package/dist/components/LpContextMenu.vue.d.ts +11 -0
  39. package/dist/components/LpContextMenu.vue.js +1 -1
  40. package/dist/components/LpDatePicker.vue.js +1 -1
  41. package/dist/components/LpDateRangePicker.vue.js +1 -1
  42. package/dist/components/LpDrawer.vue.js +1 -1
  43. package/dist/components/LpDropdownMenu.vue.d.ts +6 -0
  44. package/dist/components/LpDropdownMenu.vue.js +1 -1
  45. package/dist/components/LpDropzone.vue.d.ts +14 -0
  46. package/dist/components/LpDropzone.vue.js +9 -7
  47. package/dist/components/LpFileTree.vue.js +1 -1
  48. package/dist/components/LpFileTreeNode.vue.js +1 -1
  49. package/dist/components/LpLogViewer.vue.js +1 -1
  50. package/dist/components/LpModal.vue.d.ts +7 -5
  51. package/dist/components/LpModal.vue.js +1 -1
  52. package/dist/components/LpModalNav.vue.d.ts +5 -3
  53. package/dist/components/LpModalNav.vue.js +1 -1
  54. package/dist/components/LpNotificationBell.vue.js +1 -1
  55. package/dist/components/LpPie.vue.js +1 -1
  56. package/dist/components/LpScrollArea.vue.d.ts +2 -2
  57. package/dist/components/LpScrollArea.vue.js +1 -1
  58. package/dist/components/LpShortcutsDialog.vue.js +1 -1
  59. package/dist/components/LpSidebar.vue.js +1 -1
  60. package/dist/components/LpSidebarNav.vue.js +1 -1
  61. package/dist/components/LpTable.vue.js +5 -5
  62. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  63. package/dist/components/LpToaster.vue.d.ts +2 -0
  64. package/dist/components/LpToaster.vue.js +1 -1
  65. package/dist/components/MenuTitle.vue.d.ts +9 -0
  66. package/dist/components/MenuTitle.vue.js +4 -0
  67. package/dist/composables/useClipboard.js +35 -2
  68. package/dist/composables/useLocale.d.ts +2 -0
  69. package/dist/composables/useLocale.js +9 -0
  70. package/dist/index.js +22 -22
  71. package/package.json +1 -1
  72. package/src/components/LpCommandPalette.vue +7 -1
  73. package/src/components/LpContextMenu.vue +19 -1
  74. package/src/components/LpDatePicker.vue +3 -1
  75. package/src/components/LpDateRangePicker.vue +3 -1
  76. package/src/components/LpDrawer.vue +1 -1
  77. package/src/components/LpDropdownMenu.vue +14 -2
  78. package/src/components/LpDropzone.vue +13 -5
  79. package/src/components/LpModal.vue +8 -2
  80. package/src/components/LpModalNav.vue +17 -2
  81. package/src/components/LpScrollArea.vue +30 -2
  82. package/src/components/LpTable.vue +1 -1
  83. package/src/components/LpToaster.vue +42 -4
  84. package/src/components/MenuTitle.vue +34 -0
  85. package/src/composables/useClipboard.ts +49 -7
  86. package/src/composables/useLocale.ts +14 -0
  87. package/src/tokens/tokens.css +7 -4
@@ -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-2da506c1] {
8
+ .lp-cmd-dialog[data-v-254e59f7] {
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-2da506c1] {
13
+ .lp-cmd-split[data-v-254e59f7] {
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-2da506c1] {
19
+ .lp-cmd-split .lp-cmd-list[data-v-254e59f7] {
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-2da506c1] {
24
+ .lp-cmd-dialog[data-pane="open"][data-v-254e59f7] {
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-2da506c1] {
29
+ .lp-cmd-pane[data-v-254e59f7] {
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-2da506c1],
37
- .lp-cmd-pane-leave-active[data-v-2da506c1] {
36
+ .lp-cmd-pane-enter-active[data-v-254e59f7],
37
+ .lp-cmd-pane-leave-active[data-v-254e59f7] {
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-2da506c1],
43
- .lp-cmd-pane-leave-to[data-v-2da506c1] {
42
+ .lp-cmd-pane-enter-from[data-v-254e59f7],
43
+ .lp-cmd-pane-leave-to[data-v-254e59f7] {
44
44
  opacity: 0;
45
45
  transform: translateX(40%);
46
46
  }
47
- .lp-cmd-para[data-v-2da506c1] {
48
- animation: lp-cmd-para-in-2da506c1 260ms ease-out both;
47
+ .lp-cmd-para[data-v-254e59f7] {
48
+ animation: lp-cmd-para-in-254e59f7 260ms ease-out both;
49
49
  }
50
- @keyframes lp-cmd-para-in-2da506c1 {
50
+ @keyframes lp-cmd-para-in-254e59f7 {
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-2da506c1],
58
- .lp-cmd-pane-enter-active[data-v-2da506c1],
59
- .lp-cmd-pane-leave-active[data-v-2da506c1] {
57
+ .lp-cmd-split[data-v-254e59f7],
58
+ .lp-cmd-pane-enter-active[data-v-254e59f7],
59
+ .lp-cmd-pane-leave-active[data-v-254e59f7] {
60
60
  transition: none;
61
61
  }
62
- .lp-cmd-para[data-v-2da506c1] {
62
+ .lp-cmd-para[data-v-254e59f7] {
63
63
  animation: none;
64
64
  }
65
65
  }
66
- .lp-cmd-excerpt[data-v-2da506c1] {
66
+ .lp-cmd-excerpt[data-v-254e59f7] {
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-2da506c1] {
73
- animation: lp-cmd-in-2da506c1 140ms ease-out both;
72
+ .lp-cmd-item[data-v-254e59f7] {
73
+ animation: lp-cmd-in-254e59f7 140ms ease-out both;
74
74
  }
75
- @keyframes lp-cmd-in-2da506c1 {
75
+ @keyframes lp-cmd-in-254e59f7 {
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-2da506c1] {
82
+ .lp-cmd-item[data-v-254e59f7] {
83
83
  animation: none;
84
84
  }
85
85
  }
@@ -1,9 +1,9 @@
1
1
 
2
- .lp-dropzone__frame rect[data-v-6f6d375e] {
2
+ .lp-dropzone__frame rect[data-v-8f39f653] {
3
3
  stroke: var(--color-line);
4
4
  transition: stroke var(--duration-fast) linear;
5
5
  }
6
- .lp-dropzone:hover .lp-dropzone__frame rect[data-v-6f6d375e] {
6
+ .lp-dropzone:hover .lp-dropzone__frame rect[data-v-8f39f653] {
7
7
  stroke: var(--color-line-strong);
8
8
  }
9
9
 
@@ -12,33 +12,33 @@
12
12
  with every other thing on it; under a drag it is the answer to "can I let go
13
13
  here". One dash period per cycle, so the travel is continuous rather than
14
14
  jumping back at the seam. */
15
- .lp-dropzone--over .lp-dropzone__frame rect[data-v-6f6d375e] {
15
+ .lp-dropzone--over .lp-dropzone__frame rect[data-v-8f39f653] {
16
16
  stroke: var(--color-brand);
17
- animation: lp-dropzone-ants-6f6d375e 500ms linear infinite;
17
+ animation: lp-dropzone-ants-8f39f653 500ms linear infinite;
18
18
  }
19
- @keyframes lp-dropzone-ants-6f6d375e {
19
+ @keyframes lp-dropzone-ants-8f39f653 {
20
20
  to {
21
21
  stroke-dashoffset: -11;
22
22
  }
23
23
  }
24
24
 
25
25
  /* The dashes fade in and the block settles up a few pixels. */
26
- .lp-dropzone[data-v-6f6d375e] {
27
- animation: lp-dropzone-in-6f6d375e var(--duration-slow) var(--ease-settle) both;
26
+ .lp-dropzone[data-v-8f39f653] {
27
+ animation: lp-dropzone-in-8f39f653 var(--duration-slow) var(--ease-settle) both;
28
28
  }
29
- .lp-dropzone--waiting[data-v-6f6d375e] {
29
+ .lp-dropzone--waiting[data-v-8f39f653] {
30
30
  opacity: 0;
31
31
  animation: none;
32
32
  }
33
- @keyframes lp-dropzone-in-6f6d375e {
33
+ @keyframes lp-dropzone-in-8f39f653 {
34
34
  from {
35
35
  opacity: 0;
36
36
  transform: translateY(6px);
37
37
  }
38
38
  }
39
39
  @media (prefers-reduced-motion: reduce) {
40
- .lp-dropzone[data-v-6f6d375e],
41
- .lp-dropzone--waiting[data-v-6f6d375e] {
40
+ .lp-dropzone[data-v-8f39f653],
41
+ .lp-dropzone--waiting[data-v-8f39f653] {
42
42
  opacity: 1;
43
43
  transform: none;
44
44
  animation: none;
@@ -46,7 +46,7 @@ from {
46
46
 
47
47
  /* The ants stop, the colour stays: the brand stroke is what says "drop
48
48
  here", and it says it standing still. */
49
- .lp-dropzone--over .lp-dropzone__frame rect[data-v-6f6d375e] {
49
+ .lp-dropzone--over .lp-dropzone__frame rect[data-v-8f39f653] {
50
50
  animation: none;
51
51
  }
52
52
  }
@@ -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-fff7ed10],
15
- .lp-row-leave-active[data-v-fff7ed10] {
14
+ .lp-row-enter-active[data-v-7fc0998d],
15
+ .lp-row-leave-active[data-v-7fc0998d] {
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-fff7ed10] {
20
+ .lp-row-move[data-v-7fc0998d] {
21
21
  transition: transform var(--duration-medium) var(--ease-emphasized);
22
22
  }
23
- .lp-row-enter-from[data-v-fff7ed10],
24
- .lp-row-leave-to[data-v-fff7ed10] {
23
+ .lp-row-enter-from[data-v-7fc0998d],
24
+ .lp-row-leave-to[data-v-7fc0998d] {
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-fff7ed10] {
38
+ .lp-row-empty.lp-row-leave-active[data-v-7fc0998d] {
39
39
  display: none;
40
40
  }
41
41
 
@@ -54,7 +54,7 @@
54
54
  * once anything is selected. An earlier version collapsed the column to nothing
55
55
  * and floated the hover box over the first cell, where it sat on the text.
56
56
  */
57
- .lp-tick[data-v-fff7ed10] {
57
+ .lp-tick[data-v-7fc0998d] {
58
58
  display: flex;
59
59
  align-items: center;
60
60
  max-width: 0;
@@ -66,17 +66,17 @@
66
66
  padding var(--duration-medium) var(--ease-emphasized),
67
67
  opacity var(--duration-fast) ease;
68
68
  }
69
- .lp-tick-open[data-v-fff7ed10] {
69
+ .lp-tick-open[data-v-7fc0998d] {
70
70
  max-width: 3.25rem;
71
71
  padding-inline: 1rem;
72
72
  opacity: 1;
73
73
  }
74
- .lp-tick-hidden[data-v-fff7ed10],
75
- .lp-tick-cue[data-v-fff7ed10] {
74
+ .lp-tick-hidden[data-v-7fc0998d],
75
+ .lp-tick-cue[data-v-7fc0998d] {
76
76
  opacity: 0;
77
77
  }
78
- tr:hover .lp-tick-cue[data-v-fff7ed10],
79
- .lp-tick-cue[data-v-fff7ed10]:focus-within {
78
+ tr:hover .lp-tick-cue[data-v-7fc0998d],
79
+ .lp-tick-cue[data-v-7fc0998d]:focus-within {
80
80
  opacity: 1;
81
81
  }
82
82
 
@@ -84,15 +84,15 @@ tr:hover .lp-tick-cue[data-v-fff7ed10],
84
84
  turned down the rows change without animating rather than not changing. */
85
85
  /* Only where there is a hover to reveal it; a finger long-presses instead. */
86
86
  @media (hover: none) {
87
- tr:hover .lp-tick-cue[data-v-fff7ed10] {
87
+ tr:hover .lp-tick-cue[data-v-7fc0998d] {
88
88
  opacity: 0;
89
89
  }
90
90
  }
91
91
  @media (prefers-reduced-motion: reduce) {
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] {
92
+ .lp-row-enter-active[data-v-7fc0998d],
93
+ .lp-row-leave-active[data-v-7fc0998d],
94
+ .lp-row-move[data-v-7fc0998d],
95
+ .lp-tick[data-v-7fc0998d] {
96
96
  transition: none;
97
97
  }
98
98
  }
@@ -7,7 +7,7 @@ import { _ as _sfc_main$3 } from "./LpButton-CKSwC6Mu.js";
7
7
  import { _ as _sfc_main$1 } from "./LpFormField-CtVYj6tO.js";
8
8
  import { _ as _sfc_main$4 } from "./LpIcon-DYtaid0K.js";
9
9
  import { _ as _sfc_main$5 } from "./LpInput-D-YGQbEv.js";
10
- import { _ as _sfc_main$7 } from "./LpModal-DMMDQHAu.js";
10
+ import { _ as _sfc_main$7 } from "./LpModal-JNa3B_Lr.js";
11
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" };
@@ -2,9 +2,9 @@ import { defineComponent, computed, ref, useId, watch, openBlock, createElementB
2
2
  import { useLabels } from "../composables/useLpConfig.js";
3
3
  import { _ as _sfc_main$2 } from "./LpButton-CKSwC6Mu.js";
4
4
  import { _ as _sfc_main$3 } from "./LpIcon-DYtaid0K.js";
5
- import { _ as _sfc_main$5 } from "./LpScrollArea-Bry1fdOM.js";
5
+ import { _ as _sfc_main$5 } from "./LpScrollArea-Hz3-JWUG.js";
6
6
  import { _ as _sfc_main$4 } from "./LpShift-DXNsauQZ.js";
7
- import { _ as _sfc_main$1 } from "./LpSidebar-CQNB0-yU.js";
7
+ import { _ as _sfc_main$1 } from "./LpSidebar-DpEiGi8L.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" };
@@ -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-BqkAYa9X.js";
4
+ import { _ as _sfc_main$1 } from "./LpContextMenu-1cKew_Dc.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-BqkAYa9X.js";
4
+ import { _ as _sfc_main$1 } from "./LpContextMenu-1cKew_Dc.js";
5
5
  const __default__ = { inheritAttrs: false };
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
7
7
  ...__default__,
@@ -5,7 +5,7 @@ import { useFieldControl } from "../composables/useField.js";
5
5
  import { DEFAULT_SWATCHES, formatColor, opaqueCss, parseColor, rgbToHsv, isLight, clampHsv } from "../components/color.js";
6
6
  import { useClipboard } from "../composables/useClipboard.js";
7
7
  import { POPOVER_PANEL } from "../components/dropdown.js";
8
- import { _ as _sfc_main$1 } from "./LpContextMenu-BqkAYa9X.js";
8
+ import { _ as _sfc_main$1 } from "./LpContextMenu-1cKew_Dc.js";
9
9
  import { _ as _sfc_main$2 } from "./LpIcon-DYtaid0K.js";
10
10
  import { _ as _sfc_main$3 } from "./LpRollingText-DB7upf-5.js";
11
11
  const _hoisted_1 = ["id", "disabled", "aria-label", "aria-invalid", "aria-describedby"];
@@ -2,7 +2,7 @@ import { defineComponent, computed, ref, watch, openBlock, createBlock, createSl
2
2
  import { useLabels } from "../composables/useLpConfig.js";
3
3
  import { _ as _sfc_main$2 } from "./LpButton-CKSwC6Mu.js";
4
4
  import { _ as _sfc_main$3 } from "./LpIcon-DYtaid0K.js";
5
- import { _ as _sfc_main$1 } from "./LpModal-DMMDQHAu.js";
5
+ import { _ as _sfc_main$1 } from "./LpModal-JNa3B_Lr.js";
6
6
  const _hoisted_1 = { class: "inline-flex items-center gap-2.5" };
7
7
  const _hoisted_2 = {
8
8
  key: 0,
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, ref, watch, openBlock, createBlock, createCommentVNode } from "vue";
2
2
  import { confirmQueue, settleConfirm } from "../components/confirm.js";
3
- import { _ as _sfc_main$1 } from "./LpConfirmDialog-DCw5jR1t.js";
3
+ import { _ as _sfc_main$1 } from "./LpConfirmDialog-Ca-CTlxT.js";
4
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
5
5
  __name: "LpConfirmHost",
6
6
  props: {
@@ -1,12 +1,17 @@
1
1
  import { defineComponent, computed, openBlock, createBlock, unref, withCtx, createVNode, renderSlot, normalizeClass, createCommentVNode } from "vue";
2
2
  import { ContextMenuRoot, ContextMenuTrigger, ContextMenuPortal, ContextMenuContent } from "reka-ui";
3
- import { _ as _sfc_main$1 } from "./ContextMenuItems-BtKU7074.js";
3
+ import { _ as _sfc_main$2 } from "./ContextMenuItems-BtKU7074.js";
4
+ import { _ as _sfc_main$1 } from "./MenuTitle-J3ZDYjpV.js";
4
5
  import { POPOVER_PANEL } from "../components/dropdown.js";
5
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
7
  __name: "LpContextMenu",
7
8
  props: {
8
9
  items: {},
9
- always: { type: Boolean }
10
+ always: { type: Boolean },
11
+ title: {},
12
+ subtitle: {},
13
+ titleIcon: {},
14
+ titleImage: {}
10
15
  },
11
16
  setup(__props) {
12
17
  const props = __props;
@@ -45,16 +50,24 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
45
50
  createVNode(unref(ContextMenuContent), {
46
51
  "collision-padding": 8,
47
52
  class: normalizeClass(PANEL),
53
+ "aria-label": __props.title,
48
54
  onCloseAutoFocus: returnFocus
49
55
  }, {
50
56
  default: withCtx(() => [
51
- createVNode(_sfc_main$1, {
57
+ __props.title ? (openBlock(), createBlock(_sfc_main$1, {
58
+ key: 0,
59
+ title: __props.title,
60
+ subtitle: __props.subtitle,
61
+ icon: __props.titleIcon,
62
+ image: __props.titleImage
63
+ }, null, 8, ["title", "subtitle", "icon", "image"])) : createCommentVNode("", true),
64
+ createVNode(_sfc_main$2, {
52
65
  items: __props.items,
53
66
  panel: PANEL
54
67
  }, null, 8, ["items"])
55
68
  ]),
56
69
  _: 1
57
- })
70
+ }, 8, ["aria-label"])
58
71
  ]),
59
72
  _: 1
60
73
  })) : createCommentVNode("", true)
@@ -1,6 +1,7 @@
1
1
  import { defineComponent, ref, computed, useAttrs, openBlock, createElementBlock, normalizeStyle, unref, normalizeClass, createVNode, withCtx, createElementVNode, mergeProps, createCommentVNode, toDisplayString } from "vue";
2
2
  import { PopoverRoot, PopoverTrigger, PopoverPortal, PopoverContent } from "reka-ui";
3
3
  import { useFieldControl } from "../composables/useField.js";
4
+ import { useLocale } from "../composables/useLocale.js";
4
5
  import { useLabels } from "../composables/useLpConfig.js";
5
6
  import { mergeClass } from "../composables/useMergedClass.js";
6
7
  import { POPOVER_PANEL } from "../components/dropdown.js";
@@ -48,11 +49,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
48
49
  const at = (props.modelValue || "").slice(11, 16);
49
50
  return /^\d{2}:\d{2}$/.test(at) ? at : "";
50
51
  });
52
+ const locale = useLocale();
51
53
  const display = computed(() => {
52
54
  if (!props.modelValue) return "";
53
55
  const [y, m, d] = day.value.split("-").map(Number);
54
56
  if (!y || !m || !d) return props.modelValue;
55
- const shown = new Intl.DateTimeFormat(void 0, props.format).format(new Date(y, m - 1, d));
57
+ const shown = new Intl.DateTimeFormat(locale.value, props.format).format(new Date(y, m - 1, d));
56
58
  return props.time && minute.value ? `${shown}, ${minute.value}` : shown;
57
59
  });
58
60
  const shellSize = {
@@ -1,6 +1,7 @@
1
1
  import { defineComponent, ref, computed, onMounted, onBeforeUnmount, useAttrs, openBlock, createElementBlock, normalizeStyle, unref, normalizeClass, createVNode, withCtx, createElementVNode, mergeProps, createCommentVNode, Fragment, renderList, toDisplayString } from "vue";
2
2
  import { PopoverRoot, PopoverTrigger, PopoverPortal, PopoverContent } from "reka-ui";
3
3
  import { useFieldControl } from "../composables/useField.js";
4
+ import { useLocale } from "../composables/useLocale.js";
4
5
  import { useLabels } from "../composables/useLpConfig.js";
5
6
  import { mergeClass } from "../composables/useMergedClass.js";
6
7
  import { normalizeRange, formatRange, defaultRangePresets, sameRange, clampRange } from "../components/dateRange.js";
@@ -58,7 +59,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
58
59
  );
59
60
  const open = ref(false);
60
61
  const value = computed(() => normalizeRange(props.modelValue));
61
- const display = computed(() => value.value ? formatRange(value.value, props.locale, props.format) : "");
62
+ const locale = useLocale(() => props.locale);
63
+ const display = computed(() => value.value ? formatRange(value.value, locale.value, props.format) : "");
62
64
  const presetList = computed(() => {
63
65
  return props.presets ?? defaultRangePresets(text.value);
64
66
  });
@@ -174,7 +176,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
174
176
  "is-date-unavailable": __props.isDateUnavailable,
175
177
  "maximum-days": __props.maximumDays,
176
178
  months: wide.value ? 2 : 1,
177
- locale: __props.locale,
179
+ locale: unref(locale),
178
180
  class: "border-0 bg-transparent",
179
181
  "onUpdate:modelValue": pick
180
182
  }, null, 8, ["model-value", "min", "max", "is-disabled", "is-date-unavailable", "maximum-days", "months", "locale"])
@@ -4,7 +4,7 @@ import { CLOSE_ICON } from "../components/dropdown.js";
4
4
  import { useGlass } from "../composables/useGlass.js";
5
5
  import { useLabels } from "../composables/useLpConfig.js";
6
6
  import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
7
- import { _ as _sfc_main$2 } from "./LpScrollArea-Bry1fdOM.js";
7
+ import { _ as _sfc_main$2 } from "./LpScrollArea-Hz3-JWUG.js";
8
8
  import { useModalLayer, anyModalOpen } from "../components/modalDepth.js";
9
9
  const _hoisted_1 = { class: "text-base font-semibold text-ink" };
10
10
  const _hoisted_2 = { class: "flex flex-col gap-1" };
@@ -60,7 +60,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
60
60
  watch(() => props.open, (open) => open ? claim() : release(), { immediate: true });
61
61
  onBeforeUnmount(release);
62
62
  const contentClass = computed(() => {
63
- const surface = frosted.value ? layer.value.nested ? "lp-glass-overlay--nested" : "lp-glass-overlay" : "bg-surface-raised";
63
+ const surface = frosted.value ? layer.value.nested ? "lp-glass-overlay lp-glass-overlay--nested" : "lp-glass-overlay" : "bg-surface-raised";
64
64
  const base = `fixed z-(--z-modal) flex flex-col border-line ${surface} shadow-panel outline-none`;
65
65
  const map = {
66
66
  left: "inset-y-0 left-0 border-r rounded-r-card",
@@ -1,11 +1,16 @@
1
- import { defineComponent, openBlock, createBlock, unref, withCtx, createVNode, renderSlot, normalizeClass, createElementBlock, Fragment, renderList, createCommentVNode, createTextVNode, toDisplayString } from "vue";
1
+ import { defineComponent, openBlock, createBlock, unref, withCtx, createVNode, renderSlot, normalizeClass, createCommentVNode, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString } from "vue";
2
2
  import { DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuPortal, DropdownMenuContent, DropdownMenuSeparator, DropdownMenuItem } from "reka-ui";
3
3
  import { POPOVER_PANEL } from "../components/dropdown.js";
4
- import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
4
+ import { _ as _sfc_main$2 } from "./LpIcon-DYtaid0K.js";
5
+ import { _ as _sfc_main$1 } from "./MenuTitle-J3ZDYjpV.js";
5
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
7
  __name: "LpDropdownMenu",
7
8
  props: {
8
- items: {}
9
+ items: {},
10
+ title: {},
11
+ subtitle: {},
12
+ titleIcon: {},
13
+ titleImage: {}
9
14
  },
10
15
  setup(__props) {
11
16
  return (_ctx, _cache) => {
@@ -23,9 +28,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
23
28
  "collision-padding": 8,
24
29
  "side-offset": 6,
25
30
  align: "end",
26
- class: normalizeClass([unref(POPOVER_PANEL), "z-(--z-popover) min-w-44 p-1 outline-none"])
31
+ class: normalizeClass([unref(POPOVER_PANEL), "z-(--z-popover) min-w-44 p-1 outline-none"]),
32
+ "aria-label": __props.title
27
33
  }, {
28
34
  default: withCtx(() => [
35
+ __props.title ? (openBlock(), createBlock(_sfc_main$1, {
36
+ key: 0,
37
+ title: __props.title,
38
+ subtitle: __props.subtitle,
39
+ icon: __props.titleIcon,
40
+ image: __props.titleImage
41
+ }, null, 8, ["title", "subtitle", "icon", "image"])) : createCommentVNode("", true),
29
42
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item, i) => {
30
43
  return openBlock(), createElementBlock(Fragment, { key: i }, [
31
44
  item.separatorBefore ? (openBlock(), createBlock(unref(DropdownMenuSeparator), {
@@ -33,11 +46,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
33
46
  class: "my-1 h-px bg-line"
34
47
  })) : createCommentVNode("", true),
35
48
  createVNode(unref(DropdownMenuItem), {
36
- class: normalizeClass(["group/item flex cursor-pointer items-center gap-2 rounded-md px-2.5 py-1.5 text-sm outline-none transition-[background-color,color] duration-[var(--duration-fast)] data-[highlighted]:bg-brand-soft", item.danger ? "text-danger data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger" : "text-ink data-[highlighted]:text-brand"]),
49
+ class: normalizeClass(["group/item flex cursor-pointer items-center gap-2 rounded-md px-2.5 py-1.5 text-sm outline-none transition-[background-color,color] duration-[var(--duration-fast)] data-[disabled]:pointer-events-none data-[disabled]:opacity-45 data-[highlighted]:bg-brand-soft", item.danger ? "text-danger data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger" : "text-ink data-[highlighted]:text-brand"]),
50
+ disabled: item.disabled,
37
51
  onSelect: ($event) => item.onSelect?.()
38
52
  }, {
39
53
  default: withCtx(() => [
40
- item.icon ? (openBlock(), createBlock(_sfc_main$1, {
54
+ item.icon ? (openBlock(), createBlock(_sfc_main$2, {
41
55
  key: 0,
42
56
  name: item.icon,
43
57
  size: 15,
@@ -46,12 +60,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
46
60
  createTextVNode(" " + toDisplayString(item.label), 1)
47
61
  ]),
48
62
  _: 2
49
- }, 1032, ["class", "onSelect"])
63
+ }, 1032, ["class", "disabled", "onSelect"])
50
64
  ], 64);
51
65
  }), 128))
52
66
  ]),
53
67
  _: 1
54
- }, 8, ["class"])
68
+ }, 8, ["class", "aria-label"])
55
69
  ]),
56
70
  _: 1
57
71
  })
@@ -1,8 +1,8 @@
1
1
  import { defineComponent, ref, watch, computed, openBlock, createElementBlock, mergeProps, unref, Fragment, renderList, normalizeStyle, createBlock, createVNode, withCtx, createElementVNode, renderSlot, normalizeProps, guardReactiveProps, createTextVNode, toDisplayString, createCommentVNode } from "vue";
2
2
  import { computeStats, formatSize, sortNodes, subtreeIds, ancestorIds } from "../components/fileTree.js";
3
3
  import { _ as _sfc_main$1 } from "./LpEmptyState-BJbZXC8D.js";
4
- import { _ as _sfc_main$3 } from "./LpFileTreeNode-D_qRRdsH.js";
5
- import { _ as _sfc_main$2 } from "./LpScrollArea-Bry1fdOM.js";
4
+ import { _ as _sfc_main$3 } from "./LpFileTreeNode-BvMSBM7X.js";
5
+ import { _ as _sfc_main$2 } from "./LpScrollArea-Hz3-JWUG.js";
6
6
  import { useMergedAttrs } from "../composables/useMergedClass.js";
7
7
  import { useLabels } from "../composables/useLpConfig.js";
8
8
  const _hoisted_1 = {
@@ -2,7 +2,7 @@ import { defineComponent, computed, resolveComponent, openBlock, createElementBl
2
2
  import { prefersReducedMotion, easingToken } from "../composables/easing.js";
3
3
  import { sortNodes, formatSize, formatModified, fileIcon } from "../components/fileTree.js";
4
4
  import { _ as _sfc_main$3 } from "./LpCheckbox-Bkj13CbW.js";
5
- import { _ as _sfc_main$1 } from "./LpContextMenu-BqkAYa9X.js";
5
+ import { _ as _sfc_main$1 } from "./LpContextMenu-1cKew_Dc.js";
6
6
  import { _ as _sfc_main$2 } from "./LpIcon-DYtaid0K.js";
7
7
  import { useMergedAttrs } from "../composables/useMergedClass.js";
8
8
  const _hoisted_1 = ["aria-level", "aria-selected", "aria-expanded", "aria-disabled"];
@@ -2,9 +2,9 @@ import { defineComponent, useModel, computed, ref, shallowRef, onMounted, onBefo
2
2
  import { prefersReducedMotion } from "../composables/easing.js";
3
3
  import { useClipboard } from "../composables/useClipboard.js";
4
4
  import { useHotkeys } from "../composables/useHotkeys.js";
5
- import { _ as _sfc_main$3 } from "./LpContextMenu-BqkAYa9X.js";
5
+ import { _ as _sfc_main$3 } from "./LpContextMenu-1cKew_Dc.js";
6
6
  import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
7
- import { _ as _sfc_main$2 } from "./LpScrollArea-Bry1fdOM.js";
7
+ import { _ as _sfc_main$2 } from "./LpScrollArea-Hz3-JWUG.js";
8
8
  import { useMergedAttrs } from "../composables/useMergedClass.js";
9
9
  import { useLabels } from "../composables/useLpConfig.js";
10
10
  import { ringWindow, matchPositions, countLevels, stepMatch } from "../components/logSearch.js";
@@ -6,7 +6,7 @@ import { useShift } from "../composables/useShift.js";
6
6
  import { useModalLayer } from "../components/modalDepth.js";
7
7
  import { CLOSE_ICON } from "../components/dropdown.js";
8
8
  import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
9
- import { _ as _sfc_main$2 } from "./LpScrollArea-Bry1fdOM.js";
9
+ import { _ as _sfc_main$2 } from "./LpScrollArea-Hz3-JWUG.js";
10
10
  const _hoisted_1 = {
11
11
  key: 0,
12
12
  "data-lp-modal-aside": "",
@@ -16,12 +16,16 @@ const _hoisted_2 = {
16
16
  key: 1,
17
17
  class: "flex shrink-0 items-start justify-between gap-4 p-5 pb-3"
18
18
  };
19
- const _hoisted_3 = { class: "flex flex-col gap-1" };
19
+ const _hoisted_3 = { class: "flex min-w-0 flex-1 flex-col gap-1" };
20
20
  const _hoisted_4 = {
21
+ key: 0,
22
+ class: "flex shrink-0 flex-wrap items-center justify-end gap-2"
23
+ };
24
+ const _hoisted_5 = {
21
25
  key: 4,
22
26
  class: "flex shrink-0 justify-end gap-2 p-5 pt-4"
23
27
  };
24
- const _hoisted_5 = {
28
+ const _hoisted_6 = {
25
29
  key: 1,
26
30
  "data-lp-modal-aside": "",
27
31
  class: "flex min-h-0 flex-col"
@@ -162,7 +166,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
162
166
  createElementVNode("div", {
163
167
  ref_key: "panelRef",
164
168
  ref: panelRef,
165
- class: normalizeClass(["relative flex max-h-[min(90vh,calc(100dvh-2rem))] min-h-0 flex-col overflow-hidden rounded-card border border-line shadow-panel", [unref(frosted) ? unref(layer).nested ? "lp-glass-overlay--nested" : "lp-glass-overlay" : "bg-surface-raised", widthClass.value, unref(tweening) ? "transition-[height] duration-fast ease-[var(--ease-emphasized)] motion-reduce:transition-none" : ""]]),
169
+ class: normalizeClass(["relative flex max-h-[min(90vh,calc(100dvh-2rem))] min-h-0 flex-col overflow-hidden rounded-card border border-line shadow-panel", [unref(frosted) ? unref(layer).nested ? "lp-glass-overlay lp-glass-overlay--nested" : "lp-glass-overlay" : "bg-surface-raised", widthClass.value, unref(tweening) ? "transition-[height] duration-fast ease-[var(--ease-emphasized)] motion-reduce:transition-none" : ""]]),
166
170
  style: normalizeStyle({ ...__props.width ? { width: __props.width } : {}, ...hasAside.value ? { alignSelf: "stretch" } : {} })
167
171
  }, [
168
172
  !(__props.title || _ctx.$slots.title) && __props.ariaLabel ? (openBlock(), createBlock(unref(DialogTitle), {
@@ -194,6 +198,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
194
198
  _: 1
195
199
  })) : createCommentVNode("", true)
196
200
  ]),
201
+ _ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_4, [
202
+ renderSlot(_ctx.$slots, "actions")
203
+ ])) : createCommentVNode("", true),
197
204
  createVNode(unref(DialogClose), {
198
205
  "data-lp-dialog-close": "",
199
206
  class: "group flex shrink-0 items-center rounded-md p-1 text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
@@ -224,11 +231,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
224
231
  ]),
225
232
  _: 3
226
233
  }, 8, ["class", "content-class"])),
227
- _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_4, [
234
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_5, [
228
235
  renderSlot(_ctx.$slots, "footer")
229
236
  ])) : createCommentVNode("", true)
230
237
  ], 6),
231
- _ctx.$slots.asideEnd ? (openBlock(), createElementBlock("aside", _hoisted_5, [
238
+ _ctx.$slots.asideEnd ? (openBlock(), createElementBlock("aside", _hoisted_6, [
232
239
  renderSlot(_ctx.$slots, "asideEnd")
233
240
  ])) : createCommentVNode("", true)
234
241
  ]),