@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.
- package/components/ui-text/ui-text.html +15 -0
- package/dist/index.js +1 -1
- package/editor/chunks/extensions.js +46 -1
- package/editor/extensions/input-rule-history.d.ts +9 -0
- package/package.json +1 -1
- package/styles/ui-text.css +16 -0
- package/vanilla/UiText.d.ts +1 -0
- package/vanilla/UiText.js +25 -25
- package/vue/UiText.d.ts +9 -0
- package/vue/UiText.vue +41 -0
- package/vue/chunks/UiText.js +43 -1
- package/vue/components.css +37 -25
- package/vue/editor/LoomaEditor.d.ts +2 -2
- package/vue/editor/compact/index.d.ts +2 -2
- package/vue/editor/compact/index.js +48 -2
- package/vue/editor/index.js +10 -6
package/vue/chunks/UiText.js
CHANGED
|
@@ -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-
|
|
699
|
+
}), [["__scopeId", "data-v-a12d976f"]]);
|
|
658
700
|
//#endregion
|
|
659
701
|
export { UiText_default as t };
|
package/vue/components.css
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
package/vue/editor/index.js
CHANGED
|
@@ -2026,11 +2026,14 @@ var LoomaEditor = defineComponent({
|
|
|
2026
2026
|
],
|
|
2027
2027
|
content: props.modelValue,
|
|
2028
2028
|
editable: props.editable,
|
|
2029
|
-
editorProps: {
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
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");
|