@leavepulse/ui 0.43.1 → 0.43.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.
@@ -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-10500f32] {
8
+ .lp-cmd-dialog[data-v-0175ffca] {
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-10500f32] {
13
+ .lp-cmd-split[data-v-0175ffca] {
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-10500f32] {
19
+ .lp-cmd-split .lp-cmd-list[data-v-0175ffca] {
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-10500f32] {
24
+ .lp-cmd-dialog[data-pane="open"][data-v-0175ffca] {
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-10500f32] {
29
+ .lp-cmd-pane[data-v-0175ffca] {
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-10500f32],
37
- .lp-cmd-pane-leave-active[data-v-10500f32] {
36
+ .lp-cmd-pane-enter-active[data-v-0175ffca],
37
+ .lp-cmd-pane-leave-active[data-v-0175ffca] {
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-10500f32],
43
- .lp-cmd-pane-leave-to[data-v-10500f32] {
42
+ .lp-cmd-pane-enter-from[data-v-0175ffca],
43
+ .lp-cmd-pane-leave-to[data-v-0175ffca] {
44
44
  opacity: 0;
45
45
  transform: translateX(40%);
46
46
  }
47
- .lp-cmd-para[data-v-10500f32] {
48
- animation: lp-cmd-para-in-10500f32 260ms ease-out both;
47
+ .lp-cmd-para[data-v-0175ffca] {
48
+ animation: lp-cmd-para-in-0175ffca 260ms ease-out both;
49
49
  }
50
- @keyframes lp-cmd-para-in-10500f32 {
50
+ @keyframes lp-cmd-para-in-0175ffca {
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-10500f32],
58
- .lp-cmd-pane-enter-active[data-v-10500f32],
59
- .lp-cmd-pane-leave-active[data-v-10500f32] {
57
+ .lp-cmd-split[data-v-0175ffca],
58
+ .lp-cmd-pane-enter-active[data-v-0175ffca],
59
+ .lp-cmd-pane-leave-active[data-v-0175ffca] {
60
60
  transition: none;
61
61
  }
62
- .lp-cmd-para[data-v-10500f32] {
62
+ .lp-cmd-para[data-v-0175ffca] {
63
63
  animation: none;
64
64
  }
65
65
  }
66
- .lp-cmd-excerpt[data-v-10500f32] {
66
+ .lp-cmd-excerpt[data-v-0175ffca] {
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-10500f32] {
73
- animation: lp-cmd-in-10500f32 140ms ease-out both;
72
+ .lp-cmd-item[data-v-0175ffca] {
73
+ animation: lp-cmd-in-0175ffca 140ms ease-out both;
74
74
  }
75
- @keyframes lp-cmd-in-10500f32 {
75
+ @keyframes lp-cmd-in-0175ffca {
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-10500f32] {
82
+ .lp-cmd-item[data-v-0175ffca] {
83
83
  animation: none;
84
84
  }
85
85
  }
@@ -2,22 +2,22 @@
2
2
  /* The picture settles into the frame instead of appearing in it. Scale rather
3
3
  than a slide: the frame is the fixed thing here and the image lives inside
4
4
  it, so anything that moved would read as a crop that had shifted. */
5
- .lp-editor__image[data-v-667d4388] {
6
- animation: lp-editor-in-667d4388 var(--duration-slow) var(--ease-settle) both;
5
+ .lp-editor__image[data-v-a19a8cf6] {
6
+ animation: lp-editor-in-a19a8cf6 var(--duration-slow) var(--ease-settle) both;
7
7
  }
8
- .lp-editor__image--waiting[data-v-667d4388] {
8
+ .lp-editor__image--waiting[data-v-a19a8cf6] {
9
9
  opacity: 0;
10
10
  animation: none;
11
11
  }
12
- @keyframes lp-editor-in-667d4388 {
12
+ @keyframes lp-editor-in-a19a8cf6 {
13
13
  from {
14
14
  opacity: 0;
15
15
  scale: 1.04;
16
16
  }
17
17
  }
18
18
  @media (prefers-reduced-motion: reduce) {
19
- .lp-editor__image[data-v-667d4388],
20
- .lp-editor__image--waiting[data-v-667d4388] {
19
+ .lp-editor__image[data-v-a19a8cf6],
20
+ .lp-editor__image--waiting[data-v-a19a8cf6] {
21
21
  opacity: 1;
22
22
  scale: 1;
23
23
  animation: none;
@@ -9,7 +9,7 @@ import { useHotkeys } from "../composables/useHotkeys.js";
9
9
  import { useModalLayer } from "./modalDepth.js";
10
10
  import { parseCommandQuery, rankCommandItems, swapCommandTerms } from "./commandSearch.js";
11
11
  import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
12
- import '../assets/LpCommandPalette-s_kKuCRf.css';const _hoisted_1 = { class: "flex shrink-0 items-center gap-2.5 border-b border-line px-4" };
12
+ import '../assets/LpCommandPalette-DH7sPcKP.css';const _hoisted_1 = { class: "flex shrink-0 items-center gap-2.5 border-b border-line px-4" };
13
13
  const _hoisted_2 = ["title", "onClick"];
14
14
  const _hoisted_3 = ["aria-activedescendant", "placeholder", "onKeydown"];
15
15
  const _hoisted_4 = {
@@ -783,7 +783,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
783
783
  };
784
784
  }
785
785
  });
786
- const LpCommandPalette = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-10500f32"]]);
786
+ const LpCommandPalette = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-0175ffca"]]);
787
787
  export {
788
788
  LpCommandPalette as default
789
789
  };
@@ -7,7 +7,7 @@ import "reka-ui";
7
7
  import { _ as _sfc_main$2 } from "../chunks/LpIcon-CCnX5_2j.js";
8
8
  import { useMergedAttrs } from "../composables/useMergedClass.js";
9
9
  import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
10
- import '../assets/LpImageEditor-D-s8tNGO.css';const _hoisted_1 = ["aria-label"];
10
+ import '../assets/LpImageEditor-Ct7Y3aNu.css';const _hoisted_1 = ["aria-label"];
11
11
  const _hoisted_2 = ["src"];
12
12
  const _hoisted_3 = {
13
13
  key: 0,
@@ -363,7 +363,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
363
363
  };
364
364
  }
365
365
  });
366
- const LpImageEditor = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-667d4388"]]);
366
+ const LpImageEditor = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a19a8cf6"]]);
367
367
  export {
368
368
  LpImageEditor as default
369
369
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leavepulse/ui",
3
- "version": "0.43.1",
3
+ "version": "0.43.2",
4
4
  "type": "module",
5
5
  "description": "LeavePulse token-driven Vue component kit.",
6
6
  "repository": {
@@ -192,7 +192,7 @@ const props = withDefaults(
192
192
  groupLimit?: number
193
193
  /**
194
194
  * When the query matches nothing, retry it as if typed in the other
195
- * keyboard layout (QWERTY ↔ ЙЦУКЕН). Off for an app whose commands are
195
+ * keyboard layout (QWERTY ↔ Cyrillic). Off for an app whose commands are
196
196
  * meant to be typed in one layout only.
197
197
  */
198
198
  layoutFallback?: boolean
@@ -451,8 +451,8 @@ function refresh() {
451
451
  const source = computed<Command[]>(() => (mode.value ? modeItems.value : props.commands))
452
452
 
453
453
  /*
454
- * Keyboard layouts typed through each other: the query "cthdth" is "сервер"
455
- * typed with the wrong layout on. Only the QWERTY ↔ ЙЦУКЕН pair is mapped —
454
+ * Keyboard layouts typed through each other use a QWERTY ↔ Cyrillic map.
455
+ * Only that pair is mapped —
456
456
  * the one bilingual setup common enough to be worth a table — and it is a
457
457
  * fallback, tried only when the query as typed matches nothing.
458
458
  */
@@ -829,7 +829,7 @@ onBeforeUnmount(release)
829
829
 
830
830
  // Through useHotkeys rather than a listener of its own: the palette is the one
831
831
  // shortcut that has to work from inside a text field, and `code` is what makes
832
- // it fire on a layout where Ctrl-K arrives as "л".
832
+ // it fire on a layout where Ctrl-K has a different reported key.
833
833
  useHotkeys(() =>
834
834
  props.hotkey
835
835
  ? [
@@ -347,8 +347,8 @@ function onWheel(event: WheelEvent) {
347
347
  * Shortcuts, through the kit's registry rather than a switch of my own.
348
348
  *
349
349
  * useHotkeys answers three things a hand-rolled handler gets wrong, and one of
350
- * them bites here specifically: on a Cyrillic layout "R" arrives as
351
- * `key: "к"`, so matching the letter alone would leave the shortcut dead for
350
+ * them bites here specifically: a Cyrillic layout changes the reported key,
351
+ * so matching the letter alone would leave the shortcut dead for
352
352
  * the person most likely to be using this. Scoped to the viewport, so two
353
353
  * editors on a page do not both answer the same key.
354
354
  */
@@ -13,7 +13,7 @@ export interface CommandSearchTerms {
13
13
 
14
14
  const QUERY_TOKEN = /(-?)(?:(in):)?(?:"([^"]*)"|(\S+))/giu
15
15
  const LATIN = "qwertyuiop[]asdfghjkl;'zxcvbnm,.`"
16
- const CYRILLIC = "йцукенгшщзхъфывапролджэячсмитьбюё"
16
+ const CYRILLIC = "\u0439\u0446\u0443\u043A\u0435\u043D\u0433\u0448\u0449\u0437\u0445\u044A\u0444\u044B\u0432\u0430\u043F\u0440\u043E\u043B\u0434\u0436\u044D\u044F\u0447\u0441\u043C\u0438\u0442\u044C\u0431\u044E\u0451"
17
17
  const SWAP = new Map<string, string>()
18
18
 
19
19
  for (let i = 0; i < LATIN.length; i++) {
@@ -9,7 +9,7 @@ import { computed, onBeforeUnmount, onMounted, shallowReactive, type MaybeRefOrG
9
9
  *
10
10
  * layout — a binding names its key twice over. `key` is what the layout
11
11
  * produced, `code` is the physical position, and either matching counts. On
12
- * a Cyrillic layout Ctrl+K arrives as `key: "л"` with `code: "KeyK"`, and a
12
+ * a Cyrillic layout Ctrl+K arrives under a different `key` with `code: "KeyK"`, and a
13
13
  * user pressing the key printed "K" expects it to work either way.
14
14
  *
15
15
  * IME — a composing input delivers every keystroke as its own event, so