@threadlabs/looma 0.26.14 → 0.26.16

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.
@@ -10,6 +10,7 @@ var _hoisted_1 = [
10
10
  "data-grow",
11
11
  "data-size",
12
12
  "data-tone",
13
+ "data-trim",
13
14
  "data-truncate",
14
15
  "data-variant",
15
16
  "data-weight",
@@ -23,6 +24,7 @@ var _hoisted_2 = [
23
24
  "data-grow",
24
25
  "data-size",
25
26
  "data-tone",
27
+ "data-trim",
26
28
  "data-truncate",
27
29
  "data-variant",
28
30
  "data-weight",
@@ -36,6 +38,7 @@ var _hoisted_3 = [
36
38
  "data-grow",
37
39
  "data-size",
38
40
  "data-tone",
41
+ "data-trim",
39
42
  "data-truncate",
40
43
  "data-variant",
41
44
  "data-weight",
@@ -49,6 +52,7 @@ var _hoisted_4 = [
49
52
  "data-grow",
50
53
  "data-size",
51
54
  "data-tone",
55
+ "data-trim",
52
56
  "data-truncate",
53
57
  "data-variant",
54
58
  "data-weight",
@@ -62,6 +66,7 @@ var _hoisted_5 = [
62
66
  "data-grow",
63
67
  "data-size",
64
68
  "data-tone",
69
+ "data-trim",
65
70
  "data-truncate",
66
71
  "data-variant",
67
72
  "data-weight",
@@ -75,6 +80,7 @@ var _hoisted_6 = [
75
80
  "data-grow",
76
81
  "data-size",
77
82
  "data-tone",
83
+ "data-trim",
78
84
  "data-truncate",
79
85
  "data-variant",
80
86
  "data-weight",
@@ -88,6 +94,7 @@ var _hoisted_7 = [
88
94
  "data-grow",
89
95
  "data-size",
90
96
  "data-tone",
97
+ "data-trim",
91
98
  "data-truncate",
92
99
  "data-variant",
93
100
  "data-weight",
@@ -101,6 +108,7 @@ var _hoisted_8 = [
101
108
  "data-grow",
102
109
  "data-size",
103
110
  "data-tone",
111
+ "data-trim",
104
112
  "data-truncate",
105
113
  "data-variant",
106
114
  "data-weight",
@@ -114,6 +122,7 @@ var _hoisted_9 = [
114
122
  "data-grow",
115
123
  "data-size",
116
124
  "data-tone",
125
+ "data-trim",
117
126
  "data-truncate",
118
127
  "data-variant",
119
128
  "data-weight",
@@ -127,6 +136,7 @@ var _hoisted_10 = [
127
136
  "data-grow",
128
137
  "data-size",
129
138
  "data-tone",
139
+ "data-trim",
130
140
  "data-truncate",
131
141
  "data-variant",
132
142
  "data-weight",
@@ -140,6 +150,7 @@ var _hoisted_11 = [
140
150
  "data-grow",
141
151
  "data-size",
142
152
  "data-tone",
153
+ "data-trim",
143
154
  "data-truncate",
144
155
  "data-variant",
145
156
  "data-weight",
@@ -176,6 +187,10 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
176
187
  type: null,
177
188
  default: "default"
178
189
  },
190
+ trim: {
191
+ type: null,
192
+ default: false
193
+ },
179
194
  truncate: {
180
195
  type: null,
181
196
  default: false
@@ -287,6 +302,16 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
287
302
  ],
288
303
  default: "default"
289
304
  },
305
+ trim: {
306
+ type: {
307
+ kind: "terminal",
308
+ name: "boolean"
309
+ },
310
+ required: false,
311
+ target: { attribute: "trim" },
312
+ description: "Removes extra font space above the capital height and below the baseline, for compact headings and labels. Prose keeps its existing line-edge space by\n default. Browsers without text-box-trim retain normal font metrics.",
313
+ default: false
314
+ },
290
315
  truncate: {
291
316
  type: {
292
317
  kind: "terminal",
@@ -348,6 +373,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
348
373
  grow: false,
349
374
  size: "inherit",
350
375
  tone: "default",
376
+ trim: false,
351
377
  truncate: false,
352
378
  variant: "body",
353
379
  weight: "inherit",
@@ -378,6 +404,10 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
378
404
  kind: "terminal",
379
405
  name: "keyword"
380
406
  }, false, "tone", acceptedProps),
407
+ trim: checkedProp(props["trim"], {
408
+ kind: "terminal",
409
+ name: "boolean"
410
+ }, false, "trim", acceptedProps),
381
411
  truncate: checkedProp(props["truncate"], {
382
412
  kind: "terminal",
383
413
  name: "boolean"
@@ -427,6 +457,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
427
457
  checkedProps.value.grow && "grow",
428
458
  checkedProps.value.size && "size",
429
459
  checkedProps.value.size != null && `size=${encodeURIComponent(checkedProps.value.size)}`,
460
+ checkedProps.value.trim && "trim",
430
461
  checkedProps.value.tone && "tone",
431
462
  checkedProps.value.tone != null && `tone=${encodeURIComponent(checkedProps.value.tone)}`,
432
463
  checkedProps.value.weight && "weight",
@@ -452,6 +483,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
452
483
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
453
484
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
454
485
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
486
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
455
487
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
456
488
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
457
489
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -471,6 +503,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
471
503
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
472
504
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
473
505
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
506
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
474
507
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
475
508
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
476
509
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -490,6 +523,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
490
523
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
491
524
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
492
525
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
526
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
493
527
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
494
528
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
495
529
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -509,6 +543,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
509
543
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
510
544
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
511
545
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
546
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
512
547
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
513
548
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
514
549
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -528,6 +563,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
528
563
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
529
564
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
530
565
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
566
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
531
567
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
532
568
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
533
569
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -547,6 +583,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
547
583
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
548
584
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
549
585
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
586
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
550
587
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
551
588
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
552
589
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -566,6 +603,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
566
603
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
567
604
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
568
605
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
606
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
569
607
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
570
608
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
571
609
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -585,6 +623,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
585
623
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
586
624
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
587
625
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
626
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
588
627
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
589
628
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
590
629
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -604,6 +643,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
604
643
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
605
644
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
606
645
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
646
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
607
647
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
608
648
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
609
649
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -623,6 +663,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
623
663
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
624
664
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
625
665
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
666
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
626
667
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
627
668
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
628
669
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -642,6 +683,7 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
642
683
  "data-grow": reflectedProp("grow", "grow", checkedProps.value.grow, void 0, false),
643
684
  "data-size": reflectedProp("size", "size", checkedProps.value.size, void 0, false),
644
685
  "data-tone": reflectedProp("tone", "tone", checkedProps.value.tone, void 0, false),
686
+ "data-trim": reflectedProp("trim", "trim", checkedProps.value.trim, void 0, false),
645
687
  "data-truncate": reflectedProp("truncate", "truncate", checkedProps.value.truncate, void 0, false),
646
688
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
647
689
  "data-weight": reflectedProp("weight", "weight", checkedProps.value.weight, void 0, false),
@@ -654,6 +696,6 @@ var UiText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
654
696
  }]]);
655
697
  };
656
698
  }
657
- }), [["__scopeId", "data-v-7090f745"]]);
699
+ }), [["__scopeId", "data-v-a12d976f"]]);
658
700
  //#endregion
659
701
  export { UiText_default as t };
@@ -8660,10 +8660,10 @@ tbody tr[data-v-722ca2ea-s]:last-child > * {
8660
8660
  /* Running text, set on the type scale and in a tone that says what it is, so a view never styles
8661
8661
  text of its own. The root is a paragraph unless as= names a span, div, small, strong, label, or
8662
8662
  heading. */
8663
- [data-component~="ui-text"][data-ui-text-state~="grow"][data-v-7090f745] {
8663
+ [data-component~="ui-text"][data-ui-text-state~="grow"][data-v-a12d976f] {
8664
8664
  flex: 1;
8665
8665
  }
8666
- [data-component~="ui-text"][data-v-7090f745] {
8666
+ [data-component~="ui-text"][data-v-a12d976f] {
8667
8667
  margin: 0;
8668
8668
  min-inline-size: 0;
8669
8669
  color: var(--ui-text-primary);
@@ -8672,93 +8672,105 @@ tbody tr[data-v-722ca2ea-s]:last-child > * {
8672
8672
 
8673
8673
  /* A heading drops the browser's heading size and weight, so size and weight set it as they set
8674
8674
  any text, and inherit keeps the text around it. */
8675
- [data-component~="ui-text"][data-v-7090f745]:is(h2, h3, h4, h5, h6) {
8675
+ [data-component~="ui-text"][data-v-a12d976f]:is(h2, h3, h4, h5, h6) {
8676
8676
  font-size: inherit;
8677
8677
  font-weight: inherit;
8678
8678
  }
8679
- [data-component~="ui-text"][data-ui-text-state~="size=xs"][data-v-7090f745] {
8679
+ [data-component~="ui-text"][data-ui-text-state~="size=xs"][data-v-a12d976f] {
8680
8680
  font-size: var(--ui-font-size-xs);
8681
8681
  line-height: var(--ui-line-height);
8682
8682
  }
8683
- [data-component~="ui-text"][data-ui-text-state~="size=sm"][data-v-7090f745] {
8683
+ [data-component~="ui-text"][data-ui-text-state~="size=sm"][data-v-a12d976f] {
8684
8684
  font-size: var(--ui-font-size-sm);
8685
8685
  line-height: var(--ui-line-height);
8686
8686
  }
8687
- [data-component~="ui-text"][data-ui-text-state~="size=md"][data-v-7090f745] {
8687
+ [data-component~="ui-text"][data-ui-text-state~="size=md"][data-v-a12d976f] {
8688
8688
  font-size: var(--ui-font-size-md);
8689
8689
  line-height: var(--ui-line-height);
8690
8690
  }
8691
- [data-component~="ui-text"][data-ui-text-state~="size=lg"][data-v-7090f745] {
8691
+ [data-component~="ui-text"][data-ui-text-state~="size=lg"][data-v-a12d976f] {
8692
8692
  font-size: var(--ui-font-size-lg);
8693
8693
  line-height: var(--ui-line-height-relaxed);
8694
8694
  }
8695
- [data-component~="ui-text"][data-ui-text-state~="tone=secondary"][data-v-7090f745] {
8695
+
8696
+ /* Opt in at the text owner; trimming does not inherit from a surrounding layout. */
8697
+ [data-component~="ui-text"][data-ui-text-state~="trim"][data-v-a12d976f] {
8698
+ text-box-trim: trim-both;
8699
+ text-box-edge: cap alphabetic;
8700
+ }
8701
+ [data-component~="ui-text"][data-ui-text-state~="tone=secondary"][data-v-a12d976f] {
8696
8702
  color: var(--ui-text-secondary);
8697
8703
  }
8698
- [data-component~="ui-text"][data-ui-text-state~="tone=muted"][data-v-7090f745] {
8704
+ [data-component~="ui-text"][data-ui-text-state~="tone=muted"][data-v-a12d976f] {
8699
8705
  color: var(--ui-text-muted);
8700
8706
  }
8701
- [data-component~="ui-text"][data-ui-text-state~="tone=accent"][data-v-7090f745] {
8707
+ [data-component~="ui-text"][data-ui-text-state~="tone=accent"][data-v-a12d976f] {
8702
8708
  color: var(--ui-accent-active);
8703
8709
  }
8704
8710
  /* Every status tone uses the text-safe token a subtle badge sets its words in, so text and badges
8705
8711
  in one tone match, and each holds 4.5:1 on sunken surfaces where some base colours fall short. */
8706
- [data-component~="ui-text"][data-ui-text-state~="tone=danger"][data-v-7090f745] {
8712
+ [data-component~="ui-text"][data-ui-text-state~="tone=danger"][data-v-a12d976f] {
8707
8713
  color: var(--ui-danger-subtle-text);
8708
8714
  }
8709
- [data-component~="ui-text"][data-ui-text-state~="tone=success"][data-v-7090f745] {
8715
+ [data-component~="ui-text"][data-ui-text-state~="tone=success"][data-v-a12d976f] {
8710
8716
  color: var(--ui-success-subtle-text);
8711
8717
  }
8712
- [data-component~="ui-text"][data-ui-text-state~="tone=info"][data-v-7090f745] {
8718
+ [data-component~="ui-text"][data-ui-text-state~="tone=info"][data-v-a12d976f] {
8713
8719
  color: var(--ui-info-subtle-text);
8714
8720
  }
8715
- [data-component~="ui-text"][data-ui-text-state~="tone=warning"][data-v-7090f745] {
8721
+ [data-component~="ui-text"][data-ui-text-state~="tone=warning"][data-v-a12d976f] {
8716
8722
  color: var(--ui-warning-subtle-text);
8717
8723
  }
8718
- [data-component~="ui-text"][data-ui-text-state~="weight=normal"][data-v-7090f745] {
8724
+ [data-component~="ui-text"][data-ui-text-state~="weight=normal"][data-v-a12d976f] {
8719
8725
  font-weight: var(--ui-font-normal);
8720
8726
  }
8721
- [data-component~="ui-text"][data-ui-text-state~="weight=medium"][data-v-7090f745] {
8727
+ [data-component~="ui-text"][data-ui-text-state~="weight=medium"][data-v-a12d976f] {
8722
8728
  font-weight: var(--ui-font-medium);
8723
8729
  }
8724
- [data-component~="ui-text"][data-ui-text-state~="weight=semibold"][data-v-7090f745] {
8730
+ [data-component~="ui-text"][data-ui-text-state~="weight=semibold"][data-v-a12d976f] {
8725
8731
  font-weight: var(--ui-font-semibold);
8726
8732
  }
8727
- [data-component~="ui-text"][data-ui-text-state~="variant=eyebrow"][data-v-7090f745] {
8733
+ [data-component~="ui-text"][data-ui-text-state~="variant=eyebrow"][data-v-a12d976f] {
8728
8734
  font-size: var(--ui-font-size-xs);
8729
8735
  font-weight: var(--ui-font-semibold);
8730
8736
  letter-spacing: 0.06em;
8731
8737
  text-transform: uppercase;
8732
8738
  }
8733
- [data-component~="ui-text"][data-ui-text-state~="variant=code"][data-v-7090f745] {
8739
+ [data-component~="ui-text"][data-ui-text-state~="variant=code"][data-v-a12d976f] {
8734
8740
  font-family: var(--ui-font-family-mono);
8735
8741
  }
8736
8742
 
8737
8743
  /* A link in running text is underlined, so it stands apart from the words around it by more than
8738
8744
  colour. */
8739
- [data-component~="ui-text"] a[data-v-7090f745-s] {
8745
+ [data-component~="ui-text"] a[data-v-a12d976f-s] {
8740
8746
  color: var(--ui-accent-active);
8741
8747
  text-decoration: underline;
8742
8748
  text-decoration-thickness: 0.06em;
8743
8749
  text-underline-offset: 0.18em;
8744
8750
  }
8745
- [data-component~="ui-text"][data-ui-text-state~="truncate"][data-v-7090f745] {
8751
+ [data-component~="ui-text"][data-ui-text-state~="truncate"][data-v-a12d976f] {
8746
8752
  overflow: hidden;
8747
8753
  text-overflow: ellipsis;
8748
8754
  white-space: nowrap;
8749
8755
  }
8750
- [data-component~="ui-text"][data-ui-text-state~="align=center"][data-v-7090f745] {
8756
+
8757
+ /* Trim ends the layout box at the baseline; preserve descending ink while clipping long labels. */
8758
+ [data-component~="ui-text"][data-ui-text-state~="trim"][data-ui-text-state~="truncate"][data-v-a12d976f] {
8759
+ overflow-x: clip;
8760
+ overflow-y: visible;
8761
+ }
8762
+ [data-component~="ui-text"][data-ui-text-state~="align=center"][data-v-a12d976f] {
8751
8763
  text-align: center;
8752
8764
  }
8753
- [data-component~="ui-text"][data-ui-text-state~="font=sans"][data-v-7090f745] {
8765
+ [data-component~="ui-text"][data-ui-text-state~="font=sans"][data-v-a12d976f] {
8754
8766
  font-family: var(--ui-font-family-sans, sans-serif);
8755
8767
  }
8756
- [data-component~="ui-text"][data-ui-text-state~="wrap=anywhere"][data-v-7090f745] {
8768
+ [data-component~="ui-text"][data-ui-text-state~="wrap=anywhere"][data-v-a12d976f] {
8757
8769
  overflow-wrap: anywhere;
8758
8770
  }
8759
8771
 
8760
8772
  /* A component that sets its display still honours the hidden attribute on its root. */
8761
- [data-component~="ui-text"][hidden][data-v-7090f745] {
8773
+ [data-component~="ui-text"][hidden][data-v-a12d976f] {
8762
8774
  display: none;
8763
8775
  }
8764
8776
 
@@ -370,13 +370,13 @@ export declare const LoomaEditor: import("vue").DefineComponent<import("vue").Ex
370
370
  }>, {
371
371
  label: string;
372
372
  placeholder: string;
373
+ extensions: AnyExtension[];
374
+ editable: boolean;
373
375
  linkBaseUrl: string;
374
376
  disableHighlight: boolean;
375
377
  codeLanguages: Readonly<Record<string, import("highlight.js").LanguageFn>> | null;
376
378
  modelValue: JSONContent;
377
- editable: boolean;
378
379
  contentDensity: "compact" | "comfortable";
379
- extensions: AnyExtension[];
380
380
  slashCommands: LoomaEditorSlashCommands;
381
381
  mentionItems: LoomaMentionItem[];
382
382
  mentionProvider: LoomaMentionProvider | undefined;
@@ -64,9 +64,9 @@ export declare const LoomaCompactEditor: import("vue").DefineComponent<import("v
64
64
  }>, {
65
65
  label: string;
66
66
  id: string;
67
- modelValue: JSONContent;
68
- editable: boolean;
69
67
  extensions: AnyExtension[];
68
+ editable: boolean;
69
+ modelValue: JSONContent;
70
70
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
71
71
  /** Renders basic compact JSON as escaped Vue nodes, including during SSR. */
72
72
  export declare const LoomaCompactContent: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
@@ -1,7 +1,8 @@
1
1
  import { defineComponent, h, onBeforeUnmount, onMounted, shallowRef, watch } from "vue";
2
2
  import { Extension, Mark, Node, markInputRule, markPasteRule, mergeAttributes } from "@tiptap/core";
3
3
  import { Editor, EditorContent } from "@tiptap/vue-3";
4
- import { history, redo, undo } from "@tiptap/pm/history";
4
+ import { closeHistory, history, redo, undo } from "@tiptap/pm/history";
5
+ import { Plugin } from "@tiptap/pm/state";
5
6
  //#region ../../node_modules/.pnpm/@tiptap+extension-document@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-document/dist/index.js
6
7
  /**
7
8
  * The default document node which represents the top level node of the editor.
@@ -392,6 +393,50 @@ var History = Extension.create({
392
393
  }
393
394
  });
394
395
  //#endregion
396
+ //#region src/editor/extensions/input-rule-history.ts
397
+ /**
398
+ * Keep the literal trigger in typing history before converting it. Tiptap's
399
+ * usual input rule consumes the final character, so simply closing history
400
+ * would restore an incomplete Markdown delimiter on Undo.
401
+ * @invariant Conversion and subsequent typing are separate history events.
402
+ * @lifecycle Tiptap clears its undoable input rule on typing or caret movement.
403
+ */
404
+ var LoomaInputRuleHistory = Extension.create({
405
+ name: "loomaInputRuleHistory",
406
+ priority: 50,
407
+ onBeforeCreate() {
408
+ const props = this.editor.options.editorProps;
409
+ this.editor.setOptions({ editorProps: {
410
+ ...props,
411
+ handleTextInput(view, from, to, text, defaultTransaction) {
412
+ if (props.handleTextInput?.call(props, view, from, to, text, defaultTransaction)) return true;
413
+ if (view.composing) return false;
414
+ const rules = view.state.plugins.find((plugin) => plugin.spec.isInputRules);
415
+ if (!rules?.props.handleTextInput) return false;
416
+ view.dispatch((defaultTransaction?.() ?? view.state.tr.insertText(text, from, to)).scrollIntoView());
417
+ const position = view.state.selection.from;
418
+ rules.props.handleTextInput.call(rules, view, position, position, "", defaultTransaction);
419
+ return true;
420
+ }
421
+ } });
422
+ },
423
+ addKeyboardShortcuts() {
424
+ return { Escape: () => this.editor.commands.undoInputRule() };
425
+ },
426
+ addProseMirrorPlugins() {
427
+ return [new Plugin({
428
+ filterTransaction(tr, state) {
429
+ if (state.plugins.some((plugin) => plugin.spec.isInputRules && tr.getMeta(plugin))) closeHistory(tr);
430
+ return true;
431
+ },
432
+ appendTransaction(transactions, _old, state) {
433
+ if (transactions.some((tr) => state.plugins.some((plugin) => plugin.spec.isInputRules && tr.getMeta(plugin)))) return closeHistory(state.tr);
434
+ return null;
435
+ }
436
+ })];
437
+ }
438
+ });
439
+ //#endregion
395
440
  //#region src/vue/editor/compact/extensions.ts
396
441
  /** Minimal short-form schema; additional consumer extensions are opt-in. */
397
442
  function getCompactEditorExtensions() {
@@ -403,7 +448,8 @@ function getCompactEditorExtensions() {
403
448
  Italic,
404
449
  Code,
405
450
  HardBreak,
406
- History
451
+ History,
452
+ LoomaInputRuleHistory
407
453
  ];
408
454
  }
409
455
  //#endregion
@@ -2026,11 +2026,14 @@ var LoomaEditor = defineComponent({
2026
2026
  ],
2027
2027
  content: props.modelValue,
2028
2028
  editable: props.editable,
2029
- editorProps: { attributes: {
2030
- role: "textbox",
2031
- "aria-multiline": "true",
2032
- "aria-label": props.label
2033
- } },
2029
+ editorProps: {
2030
+ attributes: {
2031
+ role: "textbox",
2032
+ "aria-multiline": "true",
2033
+ "aria-label": props.label
2034
+ },
2035
+ handleKeyDown: (_view, event) => onFormattingKeyDown(event)
2036
+ },
2034
2037
  onCreate: ({ editor: instance }) => {
2035
2038
  emit("ready", instance);
2036
2039
  instance.state.doc.descendants((node) => {
@@ -2782,13 +2785,14 @@ var LoomaEditor = defineComponent({
2782
2785
  };
2783
2786
  const onFormattingKeyDown = (event) => {
2784
2787
  cancelHeldPress();
2785
- if (event.key !== "Escape" || !floatingFormattingMode() || !(event.target instanceof Node) || !(root.value?.contains(event.target) || formattingPopup?.popper.contains(event.target))) return;
2788
+ if (event.key !== "Escape" || !floatingFormattingMode() || !(event.target instanceof Node) || !(root.value?.contains(event.target) || formattingPopup?.popper.contains(event.target)) || !(formatOpen.value || formattingPopup?.popper.style.visibility === "visible")) return false;
2786
2789
  const selection = editor.value?.state.selection;
2787
2790
  dismissedFormattingSelection = selection instanceof TextSelection || selection instanceof AllSelection ? selection : null;
2788
2791
  heldFormattingSelection = null;
2789
2792
  formatOpen.value = false;
2790
2793
  formattingPopup?.hide();
2791
2794
  hideTool();
2795
+ return true;
2792
2796
  };
2793
2797
  const onResizePointerDown = (event) => {
2794
2798
  tableResizeActive = event.target instanceof HTMLElement && event.target.classList.contains("column-resize-handle");