@threadlabs/looma 0.23.13 → 0.23.15
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-input/ui-input.html +6 -1
- package/components/ui-tree-item/ui-tree-item.html +50 -1
- package/components/ui-tree-item/ui-tree-item.js +2 -1
- package/dist/index.js +1 -1
- package/editor/chunks/extensions.js +5 -5
- package/editor/extensions/table-commands.d.ts +2 -2
- package/package.json +1 -1
- package/styles/ui-input.css +6 -1
- package/styles/ui-tree-item.css +54 -2
- package/vue/UiInput.vue +6 -1
- package/vue/UiTreeItem.vue +59 -1
- package/vue/chunks/UiInput.js +1 -1
- package/vue/chunks/UiTreeItem.js +1 -1
- package/vue/components.css +157 -104
- package/vue/editor/LoomaEditor.d.ts +3 -2
- package/vue/editor/index.js +2 -2
package/vue/components.css
CHANGED
|
@@ -4820,7 +4820,7 @@ svg[data-v-7bb0fe2e-s] {
|
|
|
4820
4820
|
syntax: "*";
|
|
4821
4821
|
inherits: false;
|
|
4822
4822
|
}
|
|
4823
|
-
[data-component~="ui-input"][data-v-
|
|
4823
|
+
[data-component~="ui-input"][data-v-e45d8c3f] {
|
|
4824
4824
|
box-sizing: border-box;
|
|
4825
4825
|
display: inline-block;
|
|
4826
4826
|
inline-size: var(--ui-input-inline-size, 100%);
|
|
@@ -4860,7 +4860,7 @@ svg[data-v-7bb0fe2e-s] {
|
|
|
4860
4860
|
}
|
|
4861
4861
|
|
|
4862
4862
|
/* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
|
|
4863
|
-
[data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-
|
|
4863
|
+
[data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-e45d8c3f] {
|
|
4864
4864
|
min-block-size: var(
|
|
4865
4865
|
--ui-input-min-block-size,
|
|
4866
4866
|
var(--_ui-default-input-min-block-size, var(--ui-control-size-sm))
|
|
@@ -4868,7 +4868,7 @@ svg[data-v-7bb0fe2e-s] {
|
|
|
4868
4868
|
padding: var(--ui-space-1) var(--ui-space-2);
|
|
4869
4869
|
font-size: var(--ui-font-size-sm);
|
|
4870
4870
|
}
|
|
4871
|
-
[data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-
|
|
4871
|
+
[data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-e45d8c3f] {
|
|
4872
4872
|
min-block-size: var(
|
|
4873
4873
|
--ui-input-min-block-size,
|
|
4874
4874
|
var(--_ui-default-input-min-block-size, var(--ui-control-size-lg))
|
|
@@ -4880,31 +4880,35 @@ svg[data-v-7bb0fe2e-s] {
|
|
|
4880
4880
|
/* Under touch a small field is still a touch-sized target, as a small button is, and keeps
|
|
4881
4881
|
body-size text: below 16px, iOS zooms the page into the focused field. */
|
|
4882
4882
|
@media (pointer: coarse) {
|
|
4883
|
-
[data-component~="ui-input"][data-
|
|
4883
|
+
[data-component~="ui-input"][data-v-e45d8c3f],
|
|
4884
|
+
[data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-e45d8c3f],
|
|
4885
|
+
[data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-e45d8c3f] {
|
|
4886
|
+
font-size: var(--ui-font-size-md);
|
|
4887
|
+
}
|
|
4888
|
+
[data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-e45d8c3f] {
|
|
4884
4889
|
min-block-size: var(
|
|
4885
4890
|
--ui-input-min-block-size,
|
|
4886
4891
|
var(--_ui-default-input-min-block-size, var(--ui-control-min-block-size))
|
|
4887
4892
|
);
|
|
4888
|
-
font-size: inherit;
|
|
4889
4893
|
}
|
|
4890
4894
|
}
|
|
4891
4895
|
|
|
4892
4896
|
/* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
|
|
4893
|
-
[data-component~="ui-input"][data-v-
|
|
4897
|
+
[data-component~="ui-input"][data-v-e45d8c3f]::selection {
|
|
4894
4898
|
background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
|
|
4895
4899
|
color: inherit;
|
|
4896
4900
|
}
|
|
4897
|
-
[data-component~="ui-input"][data-v-
|
|
4901
|
+
[data-component~="ui-input"][data-v-e45d8c3f]::placeholder {
|
|
4898
4902
|
color: var(--ui-control-placeholder, var(--ui-text-secondary));
|
|
4899
4903
|
opacity: 1;
|
|
4900
4904
|
}
|
|
4901
|
-
[data-component~="ui-input"][data-v-
|
|
4905
|
+
[data-component~="ui-input"][data-v-e45d8c3f]:hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
|
|
4902
4906
|
border-color: var(
|
|
4903
4907
|
--ui-input-border-hover,
|
|
4904
4908
|
var(--_ui-default-input-border-hover, var(--ui-control-border-hover, var(--ui-text-secondary)))
|
|
4905
4909
|
);
|
|
4906
4910
|
}
|
|
4907
|
-
[data-component~="ui-input"][data-v-
|
|
4911
|
+
[data-component~="ui-input"][data-v-e45d8c3f]:focus-visible {
|
|
4908
4912
|
border-color: var(
|
|
4909
4913
|
--ui-input-focus-border,
|
|
4910
4914
|
var(--_ui-default-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid)))
|
|
@@ -4921,14 +4925,14 @@ svg[data-v-7bb0fe2e-s] {
|
|
|
4921
4925
|
}
|
|
4922
4926
|
|
|
4923
4927
|
/* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
|
|
4924
|
-
[data-component~="ui-input"][aria-invalid="true"][data-v-
|
|
4925
|
-
[data-component~="ui-input"][data-v-
|
|
4928
|
+
[data-component~="ui-input"][aria-invalid="true"][data-v-e45d8c3f],
|
|
4929
|
+
[data-component~="ui-input"][data-v-e45d8c3f]:is(:user-invalid, [data-user-invalid]) {
|
|
4926
4930
|
border-color: var(
|
|
4927
4931
|
--ui-input-invalid-border,
|
|
4928
4932
|
var(--_ui-default-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)))
|
|
4929
4933
|
);
|
|
4930
4934
|
}
|
|
4931
|
-
[data-component~="ui-input"][data-v-
|
|
4935
|
+
[data-component~="ui-input"][data-v-e45d8c3f]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
|
|
4932
4936
|
box-shadow: var(
|
|
4933
4937
|
--ui-input-invalid-focus-shadow,
|
|
4934
4938
|
var(
|
|
@@ -4942,7 +4946,7 @@ svg[data-v-7bb0fe2e-s] {
|
|
|
4942
4946
|
)
|
|
4943
4947
|
);
|
|
4944
4948
|
}
|
|
4945
|
-
[data-component~="ui-input"][data-v-
|
|
4949
|
+
[data-component~="ui-input"][data-v-e45d8c3f]:disabled {
|
|
4946
4950
|
background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
|
|
4947
4951
|
color: var(--ui-disabled-text);
|
|
4948
4952
|
box-shadow: none;
|
|
@@ -4951,7 +4955,7 @@ svg[data-v-7bb0fe2e-s] {
|
|
|
4951
4955
|
|
|
4952
4956
|
/* Forced colors drop box shadows, so the focus ring becomes an outline. */
|
|
4953
4957
|
@media (forced-colors: active) {
|
|
4954
|
-
[data-component~="ui-input"][data-v-
|
|
4958
|
+
[data-component~="ui-input"][data-v-e45d8c3f]:focus-visible {
|
|
4955
4959
|
outline: var(
|
|
4956
4960
|
--ui-input-focus-outline,
|
|
4957
4961
|
var(--_ui-default-input-focus-outline, var(--ui-focus-width) solid Highlight)
|
|
@@ -4964,7 +4968,7 @@ svg[data-v-7bb0fe2e-s] {
|
|
|
4964
4968
|
* scroll vertically inside the field. Native inputs already center their single line. */
|
|
4965
4969
|
|
|
4966
4970
|
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
4967
|
-
[data-component~="ui-input"][hidden][data-v-
|
|
4971
|
+
[data-component~="ui-input"][hidden][data-v-e45d8c3f] {
|
|
4968
4972
|
display: none;
|
|
4969
4973
|
}
|
|
4970
4974
|
|
|
@@ -8459,7 +8463,7 @@ to {
|
|
|
8459
8463
|
syntax: "*";
|
|
8460
8464
|
inherits: false;
|
|
8461
8465
|
}
|
|
8462
|
-
[data-component~="ui-tree-item"][data-v-
|
|
8466
|
+
[data-component~="ui-tree-item"][data-v-fd74ff6c] {
|
|
8463
8467
|
/* Hooks do not inherit, so the parts below read them from the root. The tree's density
|
|
8464
8468
|
sets the defaults, in --_ui-default-*. */
|
|
8465
8469
|
--_ui-tree-item-min-block-size: var(
|
|
@@ -8481,7 +8485,7 @@ to {
|
|
|
8481
8485
|
min-inline-size: 0;
|
|
8482
8486
|
margin-inline-start: calc(var(--_ui-tree-item-indent-step, 0) * var(--_ui-tree-indent, 16px));
|
|
8483
8487
|
}
|
|
8484
|
-
.row[data-v-
|
|
8488
|
+
.row[data-v-fd74ff6c] {
|
|
8485
8489
|
position: relative;
|
|
8486
8490
|
display: grid;
|
|
8487
8491
|
grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
|
|
@@ -8498,54 +8502,54 @@ to {
|
|
|
8498
8502
|
box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
|
|
8499
8503
|
min-block-size var(--ui-motion-base) var(--ui-motion-ease);
|
|
8500
8504
|
}
|
|
8501
|
-
.row[data-v-
|
|
8502
|
-
.row[data-v-
|
|
8505
|
+
.row[data-v-fd74ff6c]:hover,
|
|
8506
|
+
.row[data-v-fd74ff6c]:focus-within {
|
|
8503
8507
|
color: var(--ui-text-primary);
|
|
8504
8508
|
background: var(--ui-surface-muted);
|
|
8505
8509
|
}
|
|
8506
8510
|
|
|
8507
8511
|
/* Selection is the same surface recipe as destination and choice rows. */
|
|
8508
|
-
[data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"] > .row[data-v-
|
|
8512
|
+
[data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"] > .row[data-v-fd74ff6c] {
|
|
8509
8513
|
color: var(--ui-selection-text);
|
|
8510
8514
|
background: var(--ui-selection-surface);
|
|
8511
8515
|
}
|
|
8512
8516
|
[data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"]:not([aria-disabled="true"])
|
|
8513
8517
|
> .row
|
|
8514
|
-
> .leading[data-v-
|
|
8518
|
+
> .leading[data-v-fd74ff6c] {
|
|
8515
8519
|
color: var(--ui-selection-text);
|
|
8516
8520
|
}
|
|
8517
|
-
[data-component~="ui-tree-item"][data-ui-tree-item-state~="disabled"] .row[data-v-
|
|
8521
|
+
[data-component~="ui-tree-item"][data-ui-tree-item-state~="disabled"] .row[data-v-fd74ff6c] {
|
|
8518
8522
|
color: var(--ui-disabled-text);
|
|
8519
8523
|
background: var(--ui-disabled-surface);
|
|
8520
8524
|
}
|
|
8521
|
-
[data-component~="ui-tree-item"][data-dragging]:not([data-move-source]) .row[data-v-
|
|
8525
|
+
[data-component~="ui-tree-item"][data-dragging]:not([data-move-source]) .row[data-v-fd74ff6c] {
|
|
8522
8526
|
opacity: 0.42;
|
|
8523
8527
|
}
|
|
8524
|
-
[data-component~="ui-tree-item"][data-move-source] > .row > .label[data-v-
|
|
8525
|
-
[data-component~="ui-tree-item"][data-move-source] > .row > .leading[data-v-
|
|
8528
|
+
[data-component~="ui-tree-item"][data-move-source] > .row > .label[data-v-fd74ff6c],
|
|
8529
|
+
[data-component~="ui-tree-item"][data-move-source] > .row > .leading[data-v-fd74ff6c] {
|
|
8526
8530
|
opacity: 0.42;
|
|
8527
8531
|
}
|
|
8528
|
-
[data-component~="ui-tree-item"][data-v-
|
|
8532
|
+
[data-component~="ui-tree-item"][data-v-fd74ff6c]:focus {
|
|
8529
8533
|
outline: none;
|
|
8530
8534
|
}
|
|
8531
|
-
[data-component~="ui-tree-item"]:focus-visible .row[data-v-
|
|
8535
|
+
[data-component~="ui-tree-item"]:focus-visible .row[data-v-fd74ff6c] {
|
|
8532
8536
|
box-shadow: 0 0 0 var(--ui-focus-width) var(--ui-focus-ring);
|
|
8533
8537
|
}
|
|
8534
8538
|
|
|
8535
8539
|
/* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
|
|
8536
|
-
[data-component~="ui-tree-item"][data-drop-position="inside"] > .row[data-v-
|
|
8540
|
+
[data-component~="ui-tree-item"][data-drop-position="inside"] > .row[data-v-fd74ff6c] {
|
|
8537
8541
|
background: var(--ui-accent-subtle);
|
|
8538
8542
|
box-shadow: inset 0 0 0 var(--ui-accent-line-width)
|
|
8539
8543
|
var(--_ui-tree-drop-color, var(--ui-accent-solid));
|
|
8540
8544
|
}
|
|
8541
|
-
.disclosure[data-v-
|
|
8542
|
-
.disclosure-spacer[data-v-
|
|
8545
|
+
.disclosure[data-v-fd74ff6c],
|
|
8546
|
+
.disclosure-spacer[data-v-fd74ff6c] {
|
|
8543
8547
|
grid-column: 1;
|
|
8544
8548
|
grid-row: 1;
|
|
8545
8549
|
inline-size: var(--_tree-disclosure-size);
|
|
8546
8550
|
block-size: 28px;
|
|
8547
8551
|
}
|
|
8548
|
-
.disclosure[data-v-
|
|
8552
|
+
.disclosure[data-v-fd74ff6c] {
|
|
8549
8553
|
display: grid;
|
|
8550
8554
|
/* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
|
|
8551
8555
|
place-items: center start;
|
|
@@ -8556,10 +8560,10 @@ to {
|
|
|
8556
8560
|
border-radius: var(--ui-radius-sm);
|
|
8557
8561
|
cursor: pointer;
|
|
8558
8562
|
}
|
|
8559
|
-
.disclosure[hidden][data-v-
|
|
8563
|
+
.disclosure[hidden][data-v-fd74ff6c] {
|
|
8560
8564
|
display: none;
|
|
8561
8565
|
}
|
|
8562
|
-
.selection-hit[data-v-
|
|
8566
|
+
.selection-hit[data-v-fd74ff6c] {
|
|
8563
8567
|
display: none;
|
|
8564
8568
|
grid-column: 2;
|
|
8565
8569
|
grid-row: 1;
|
|
@@ -8568,29 +8572,29 @@ to {
|
|
|
8568
8572
|
block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
|
|
8569
8573
|
cursor: pointer;
|
|
8570
8574
|
}
|
|
8571
|
-
.selection-checkbox[data-v-
|
|
8575
|
+
.selection-checkbox[data-v-fd74ff6c] {
|
|
8572
8576
|
inline-size: 1rem;
|
|
8573
8577
|
block-size: 1rem;
|
|
8574
8578
|
margin: 0;
|
|
8575
8579
|
accent-color: var(--ui-accent-solid);
|
|
8576
8580
|
}
|
|
8577
|
-
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row[data-v-
|
|
8581
|
+
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row[data-v-fd74ff6c] {
|
|
8578
8582
|
grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr);
|
|
8579
8583
|
}
|
|
8580
|
-
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .selection-hit[data-v-
|
|
8584
|
+
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .selection-hit[data-v-fd74ff6c] {
|
|
8581
8585
|
display: grid;
|
|
8582
8586
|
}
|
|
8583
|
-
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .leading[data-v-
|
|
8587
|
+
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .leading[data-v-fd74ff6c] {
|
|
8584
8588
|
grid-column: 3;
|
|
8585
8589
|
}
|
|
8586
|
-
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .label[data-v-
|
|
8590
|
+
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .label[data-v-fd74ff6c] {
|
|
8587
8591
|
grid-column: 4;
|
|
8588
8592
|
}
|
|
8589
|
-
.disclosure[data-v-
|
|
8593
|
+
.disclosure[data-v-fd74ff6c]:hover {
|
|
8590
8594
|
color: var(--ui-text-primary);
|
|
8591
8595
|
background: var(--ui-surface-elevated);
|
|
8592
8596
|
}
|
|
8593
|
-
.disclosure-icon[data-v-
|
|
8597
|
+
.disclosure-icon[data-v-fd74ff6c] {
|
|
8594
8598
|
display: grid;
|
|
8595
8599
|
place-items: center;
|
|
8596
8600
|
inline-size: 12px;
|
|
@@ -8598,7 +8602,7 @@ to {
|
|
|
8598
8602
|
transform: rotate(-90deg);
|
|
8599
8603
|
transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
|
|
8600
8604
|
}
|
|
8601
|
-
.disclosure-icon[data-v-
|
|
8605
|
+
.disclosure-icon[data-v-fd74ff6c]::before {
|
|
8602
8606
|
display: block;
|
|
8603
8607
|
inline-size: 0.375rem;
|
|
8604
8608
|
block-size: 0.375rem;
|
|
@@ -8608,19 +8612,19 @@ to {
|
|
|
8608
8612
|
/* A chevron's ink sits below its box centre; lift it so it centres optically (in either rotation). */
|
|
8609
8613
|
transform: translateY(-20%) rotate(45deg);
|
|
8610
8614
|
}
|
|
8611
|
-
[data-component~="ui-tree-item"][aria-expanded="true"] .disclosure-icon[data-v-
|
|
8615
|
+
[data-component~="ui-tree-item"][aria-expanded="true"] .disclosure-icon[data-v-fd74ff6c] {
|
|
8612
8616
|
transform: rotate(0deg);
|
|
8613
8617
|
}
|
|
8614
8618
|
|
|
8615
8619
|
/* Lucide grip-vertical, filling the handle as in Looma 0.2. */
|
|
8616
|
-
.drag-handle svg[data-v-
|
|
8620
|
+
.drag-handle svg[data-v-fd74ff6c] {
|
|
8617
8621
|
display: block;
|
|
8618
8622
|
inline-size: 100%;
|
|
8619
8623
|
block-size: 100%;
|
|
8620
8624
|
}
|
|
8621
8625
|
|
|
8622
8626
|
/* Slotted content is outside this scope, so :has() cannot see it; hide only a truly empty slot. */
|
|
8623
|
-
.leading[data-v-
|
|
8627
|
+
.leading[data-v-fd74ff6c] {
|
|
8624
8628
|
display: inline-grid;
|
|
8625
8629
|
place-items: center;
|
|
8626
8630
|
grid-column: 2;
|
|
@@ -8633,12 +8637,12 @@ to {
|
|
|
8633
8637
|
position: relative;
|
|
8634
8638
|
z-index: 1;
|
|
8635
8639
|
}
|
|
8636
|
-
.leading[data-v-
|
|
8640
|
+
.leading[data-v-fd74ff6c]:empty {
|
|
8637
8641
|
display: none;
|
|
8638
8642
|
}
|
|
8639
8643
|
|
|
8640
8644
|
/* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
|
|
8641
|
-
svg[data-v-
|
|
8645
|
+
svg[data-v-fd74ff6c-s],img[data-v-fd74ff6c-s] {
|
|
8642
8646
|
display: block;
|
|
8643
8647
|
inline-size: 1em;
|
|
8644
8648
|
block-size: 1em;
|
|
@@ -8647,7 +8651,7 @@ svg[data-v-d2b1bbe0-s],img[data-v-d2b1bbe0-s] {
|
|
|
8647
8651
|
|
|
8648
8652
|
/* The label spans the row's height and centres its content, so slotted content (a link) can
|
|
8649
8653
|
stretch to fill the row as its own hit area; the padding tokens remove the inset. */
|
|
8650
|
-
.label[data-v-
|
|
8654
|
+
.label[data-v-fd74ff6c] {
|
|
8651
8655
|
grid-column: 3;
|
|
8652
8656
|
grid-row: 1;
|
|
8653
8657
|
align-self: stretch;
|
|
@@ -8665,7 +8669,7 @@ svg[data-v-d2b1bbe0-s],img[data-v-d2b1bbe0-s] {
|
|
|
8665
8669
|
|
|
8666
8670
|
/* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
|
|
8667
8671
|
its own text and reading as overflow. */
|
|
8668
|
-
.label-text[data-v-
|
|
8672
|
+
.label-text[data-v-fd74ff6c] {
|
|
8669
8673
|
display: flex;
|
|
8670
8674
|
align-items: center;
|
|
8671
8675
|
/* Stretches, so slotted content can still be the row's full-height hit area. */
|
|
@@ -8675,16 +8679,16 @@ svg[data-v-d2b1bbe0-s],img[data-v-d2b1bbe0-s] {
|
|
|
8675
8679
|
inline-size: 100%;
|
|
8676
8680
|
white-space: nowrap;
|
|
8677
8681
|
}
|
|
8678
|
-
.label-text > [data-v-
|
|
8682
|
+
.label-text > [data-v-fd74ff6c-s] {
|
|
8679
8683
|
flex: 1 1 auto;
|
|
8680
8684
|
min-inline-size: 0;
|
|
8681
8685
|
}
|
|
8682
8686
|
|
|
8683
8687
|
/* The controls sit over the label's end, so the text fades out where they begin. The fade is
|
|
8684
8688
|
the truncation mark while it shows: an ellipsis under it would read as a second one. */
|
|
8685
|
-
.row:hover > .label[data-v-
|
|
8686
|
-
.row:focus-within > .label[data-v-
|
|
8687
|
-
[data-component~="ui-tree-item"][data-move-source] > .row > .label[data-v-
|
|
8689
|
+
.row:hover > .label[data-v-fd74ff6c],
|
|
8690
|
+
.row:focus-within > .label[data-v-fd74ff6c],
|
|
8691
|
+
[data-component~="ui-tree-item"][data-move-source] > .row > .label[data-v-fd74ff6c] {
|
|
8688
8692
|
text-overflow: clip;
|
|
8689
8693
|
mask-image: linear-gradient(
|
|
8690
8694
|
to right,
|
|
@@ -8692,9 +8696,9 @@ svg[data-v-d2b1bbe0-s],img[data-v-d2b1bbe0-s] {
|
|
|
8692
8696
|
transparent calc(100% - var(--_tree-actions-width, 1.75rem))
|
|
8693
8697
|
);
|
|
8694
8698
|
}
|
|
8695
|
-
.row:hover > .label[data-v-
|
|
8696
|
-
.row:focus-within > .label[data-v-
|
|
8697
|
-
[data-component~="ui-tree-item"][data-move-source] > .row > .label[data-v-
|
|
8699
|
+
.row:hover > .label[data-v-fd74ff6c]:dir(rtl),
|
|
8700
|
+
.row:focus-within > .label[data-v-fd74ff6c]:dir(rtl),
|
|
8701
|
+
[data-component~="ui-tree-item"][data-move-source] > .row > .label[data-v-fd74ff6c]:dir(rtl) {
|
|
8698
8702
|
mask-image: linear-gradient(
|
|
8699
8703
|
to left,
|
|
8700
8704
|
#000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
|
|
@@ -8706,10 +8710,10 @@ svg[data-v-d2b1bbe0-s],img[data-v-d2b1bbe0-s] {
|
|
|
8706
8710
|
there, and starts again. Only when it actually overflows — the controller measures by how
|
|
8707
8711
|
much — after the controls have taken their place over its end — and hands over the distance
|
|
8708
8712
|
and a duration from it, so every name moves at the same speed. */
|
|
8709
|
-
.row[data-ui-marquee] > .label > .label-text[data-v-
|
|
8713
|
+
.row[data-ui-marquee] > .label > .label-text[data-v-fd74ff6c] {
|
|
8710
8714
|
/* Once per pass: the controller restarts it after a rest at the end, so the name holds still
|
|
8711
8715
|
long enough to read rather than sliding back and forth. */
|
|
8712
|
-
animation: ui-tree-item-marquee-
|
|
8716
|
+
animation: ui-tree-item-marquee-fd74ff6c var(--_marquee-duration) linear 0.5s 1 normal forwards;
|
|
8713
8717
|
will-change: transform;
|
|
8714
8718
|
}
|
|
8715
8719
|
|
|
@@ -8717,7 +8721,7 @@ svg[data-v-d2b1bbe0-s],img[data-v-d2b1bbe0-s] {
|
|
|
8717
8721
|
slides, the label reaches back under the icon (the controller measures how far) with its text
|
|
8718
8722
|
where it was, and fades out across the gap before the icon, fully gone where the icon begins
|
|
8719
8723
|
to cover it: the name slips under the icon rather than stopping at a hard edge beside it. */
|
|
8720
|
-
.row[data-ui-marquee] > .label[data-v-
|
|
8724
|
+
.row[data-ui-marquee] > .label[data-v-fd74ff6c] {
|
|
8721
8725
|
margin-inline-start: calc(-1 * var(--_marquee-lead, 0px));
|
|
8722
8726
|
padding-inline-start: calc(
|
|
8723
8727
|
var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
|
|
@@ -8732,7 +8736,7 @@ svg[data-v-d2b1bbe0-s],img[data-v-d2b1bbe0-s] {
|
|
|
8732
8736
|
transparent calc(100% - var(--_tree-actions-width, 1.75rem))
|
|
8733
8737
|
);
|
|
8734
8738
|
}
|
|
8735
|
-
.row[data-ui-marquee] > .label[data-v-
|
|
8739
|
+
.row[data-ui-marquee] > .label[data-v-fd74ff6c]:dir(rtl) {
|
|
8736
8740
|
mask-image: linear-gradient(
|
|
8737
8741
|
to left,
|
|
8738
8742
|
transparent var(--_marquee-icon-width, 0px),
|
|
@@ -8743,7 +8747,7 @@ svg[data-v-d2b1bbe0-s],img[data-v-d2b1bbe0-s] {
|
|
|
8743
8747
|
transparent calc(100% - var(--_tree-actions-width, 1.75rem))
|
|
8744
8748
|
);
|
|
8745
8749
|
}
|
|
8746
|
-
@keyframes ui-tree-item-marquee-
|
|
8750
|
+
@keyframes ui-tree-item-marquee-fd74ff6c {
|
|
8747
8751
|
from {
|
|
8748
8752
|
transform: translateX(0);
|
|
8749
8753
|
}
|
|
@@ -8754,15 +8758,15 @@ to {
|
|
|
8754
8758
|
|
|
8755
8759
|
/* Reduced motion keeps the fade, which already says the name continues. */
|
|
8756
8760
|
@media (prefers-reduced-motion: reduce) {
|
|
8757
|
-
.row[data-ui-marquee] > .label > .label-text[data-v-
|
|
8761
|
+
.row[data-ui-marquee] > .label > .label-text[data-v-fd74ff6c] {
|
|
8758
8762
|
animation: none;
|
|
8759
8763
|
}
|
|
8760
8764
|
}
|
|
8761
|
-
.row:hover > .label > [data-v-
|
|
8762
|
-
.row:focus-within > .label > [data-v-
|
|
8765
|
+
.row:hover > .label > [data-v-fd74ff6c-s],
|
|
8766
|
+
.row:focus-within > .label > [data-v-fd74ff6c-s] {
|
|
8763
8767
|
text-overflow: clip;
|
|
8764
8768
|
}
|
|
8765
|
-
.actions[data-v-
|
|
8769
|
+
.actions[data-v-fd74ff6c] {
|
|
8766
8770
|
position: absolute;
|
|
8767
8771
|
z-index: 1;
|
|
8768
8772
|
inset-block: 0;
|
|
@@ -8774,19 +8778,19 @@ to {
|
|
|
8774
8778
|
pointer-events: none;
|
|
8775
8779
|
transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
|
|
8776
8780
|
}
|
|
8777
|
-
.row:hover > .actions[data-v-
|
|
8778
|
-
.row:focus-within > .actions[data-v-
|
|
8779
|
-
[data-component~="ui-tree-item"][data-move-source] > .row > .actions[data-v-
|
|
8781
|
+
.row:hover > .actions[data-v-fd74ff6c],
|
|
8782
|
+
.row:focus-within > .actions[data-v-fd74ff6c],
|
|
8783
|
+
[data-component~="ui-tree-item"][data-move-source] > .row > .actions[data-v-fd74ff6c] {
|
|
8780
8784
|
opacity: 1;
|
|
8781
8785
|
pointer-events: auto;
|
|
8782
8786
|
}
|
|
8783
8787
|
|
|
8784
8788
|
/* Without hover there is no reveal, so the controls keep their own column. */
|
|
8785
|
-
@media (hover: none) {
|
|
8786
|
-
.row[data-v-
|
|
8789
|
+
@media (hover: none), (pointer: coarse) {
|
|
8790
|
+
.row[data-v-fd74ff6c] {
|
|
8787
8791
|
grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
|
|
8788
8792
|
}
|
|
8789
|
-
.actions[data-v-
|
|
8793
|
+
.actions[data-v-fd74ff6c] {
|
|
8790
8794
|
position: static;
|
|
8791
8795
|
grid-column: 4;
|
|
8792
8796
|
grid-row: 1;
|
|
@@ -8795,13 +8799,43 @@ to {
|
|
|
8795
8799
|
opacity: 1;
|
|
8796
8800
|
pointer-events: auto;
|
|
8797
8801
|
}
|
|
8802
|
+
.row:is(:hover, :focus-within) > .label[data-v-fd74ff6c],
|
|
8803
|
+
.row:is(:hover, :focus-within) > .label[data-v-fd74ff6c]:dir(rtl),
|
|
8804
|
+
[data-component~="ui-tree-item"][data-move-source] > .row > .label[data-v-fd74ff6c],
|
|
8805
|
+
[data-component~="ui-tree-item"][data-move-source] > .row > .label[data-v-fd74ff6c]:dir(rtl) {
|
|
8806
|
+
mask-image: none;
|
|
8807
|
+
}
|
|
8808
|
+
.row[data-ui-marquee] > .label[data-v-fd74ff6c] {
|
|
8809
|
+
mask-image: linear-gradient(
|
|
8810
|
+
to right,
|
|
8811
|
+
transparent var(--_marquee-icon-width, 0px),
|
|
8812
|
+
#000 calc(
|
|
8813
|
+
var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
|
|
8814
|
+
)
|
|
8815
|
+
);
|
|
8816
|
+
}
|
|
8817
|
+
.row[data-ui-marquee] > .label[data-v-fd74ff6c]:dir(rtl) {
|
|
8818
|
+
mask-image: linear-gradient(
|
|
8819
|
+
to left,
|
|
8820
|
+
transparent var(--_marquee-icon-width, 0px),
|
|
8821
|
+
#000 calc(
|
|
8822
|
+
var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
|
|
8823
|
+
)
|
|
8824
|
+
);
|
|
8825
|
+
}
|
|
8826
|
+
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row[data-v-fd74ff6c] {
|
|
8827
|
+
grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr) auto;
|
|
8828
|
+
}
|
|
8829
|
+
[data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .actions[data-v-fd74ff6c] {
|
|
8830
|
+
grid-column: 5;
|
|
8831
|
+
}
|
|
8798
8832
|
}
|
|
8799
8833
|
|
|
8800
8834
|
/* The handle sits beside what it drags. A leaf row has no disclosure, so the handle takes that
|
|
8801
8835
|
empty column, right before the icon; a branch's disclosure is there, so its handle sits just
|
|
8802
8836
|
outside the row. It is bare until pointed at: a resting surface behind it read as a faint
|
|
8803
8837
|
patch rather than as a control. */
|
|
8804
|
-
.drag-handle[data-v-
|
|
8838
|
+
.drag-handle[data-v-fd74ff6c] {
|
|
8805
8839
|
position: absolute;
|
|
8806
8840
|
z-index: 2;
|
|
8807
8841
|
inset-block-start: 50%;
|
|
@@ -8822,24 +8856,24 @@ to {
|
|
|
8822
8856
|
transform: translateY(-50%);
|
|
8823
8857
|
transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
|
|
8824
8858
|
}
|
|
8825
|
-
.row:hover .drag-handle[data-v-
|
|
8826
|
-
.drag-handle[data-v-
|
|
8827
|
-
.drag-handle[data-v-
|
|
8828
|
-
[data-component~="ui-tree-item"][data-dragging] > .row > .drag-handle[data-v-
|
|
8859
|
+
.row:hover .drag-handle[data-v-fd74ff6c],
|
|
8860
|
+
.drag-handle[data-v-fd74ff6c]:hover,
|
|
8861
|
+
.drag-handle[data-v-fd74ff6c]:focus-visible,
|
|
8862
|
+
[data-component~="ui-tree-item"][data-dragging] > .row > .drag-handle[data-v-fd74ff6c] {
|
|
8829
8863
|
opacity: 1;
|
|
8830
8864
|
}
|
|
8831
|
-
[data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"] > .row > .drag-handle[data-v-
|
|
8865
|
+
[data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"] > .row > .drag-handle[data-v-fd74ff6c] {
|
|
8832
8866
|
inset-inline-start: calc(-1 * var(--_tree-disclosure-size) - 2px);
|
|
8833
8867
|
}
|
|
8834
|
-
.drag-handle[data-v-
|
|
8835
|
-
.drag-handle[data-v-
|
|
8868
|
+
.drag-handle[data-v-fd74ff6c]:hover,
|
|
8869
|
+
.drag-handle[data-v-fd74ff6c]:focus-visible {
|
|
8836
8870
|
color: var(--ui-text-primary);
|
|
8837
8871
|
background: var(--ui-surface-hover);
|
|
8838
8872
|
}
|
|
8839
|
-
.drag-handle[data-v-
|
|
8873
|
+
.drag-handle[data-v-fd74ff6c]:active {
|
|
8840
8874
|
cursor: grabbing;
|
|
8841
8875
|
}
|
|
8842
|
-
.drop-indicator[data-v-
|
|
8876
|
+
.drop-indicator[data-v-fd74ff6c] {
|
|
8843
8877
|
position: absolute;
|
|
8844
8878
|
z-index: 3;
|
|
8845
8879
|
inset-inline: 1px;
|
|
@@ -8849,8 +8883,8 @@ to {
|
|
|
8849
8883
|
background: var(--_ui-tree-drop-color, var(--ui-accent-solid));
|
|
8850
8884
|
pointer-events: none;
|
|
8851
8885
|
}
|
|
8852
|
-
.drop-indicator[data-v-
|
|
8853
|
-
.drop-indicator[data-v-
|
|
8886
|
+
.drop-indicator[data-v-fd74ff6c]::before,
|
|
8887
|
+
.drop-indicator[data-v-fd74ff6c]::after {
|
|
8854
8888
|
content: "";
|
|
8855
8889
|
position: absolute;
|
|
8856
8890
|
inset-block-start: 50%;
|
|
@@ -8861,34 +8895,34 @@ to {
|
|
|
8861
8895
|
background: var(--ui-surface-elevated);
|
|
8862
8896
|
transform: translateY(-50%);
|
|
8863
8897
|
}
|
|
8864
|
-
.drop-indicator[data-v-
|
|
8898
|
+
.drop-indicator[data-v-fd74ff6c]::before {
|
|
8865
8899
|
inset-inline-start: -1px;
|
|
8866
8900
|
}
|
|
8867
|
-
.drop-indicator[data-v-
|
|
8901
|
+
.drop-indicator[data-v-fd74ff6c]::after {
|
|
8868
8902
|
inset-inline-end: -1px;
|
|
8869
8903
|
}
|
|
8870
|
-
[data-component~="ui-tree-item"][data-drop-position="before"] > .row > .row-drop-indicator[data-v-
|
|
8904
|
+
[data-component~="ui-tree-item"][data-drop-position="before"] > .row > .row-drop-indicator[data-v-fd74ff6c] {
|
|
8871
8905
|
display: block;
|
|
8872
8906
|
inset-block-start: calc(-0.5 * var(--ui-accent-line-width));
|
|
8873
8907
|
}
|
|
8874
|
-
[data-component~="ui-tree-item"][data-drop-position="after"] > .subtree-drop-indicator[data-v-
|
|
8908
|
+
[data-component~="ui-tree-item"][data-drop-position="after"] > .subtree-drop-indicator[data-v-fd74ff6c] {
|
|
8875
8909
|
display: block;
|
|
8876
8910
|
inset-block-end: calc(-0.5 * var(--ui-accent-line-width));
|
|
8877
8911
|
}
|
|
8878
|
-
.children[hidden][data-v-
|
|
8912
|
+
.children[hidden][data-v-fd74ff6c] {
|
|
8879
8913
|
display: none;
|
|
8880
8914
|
}
|
|
8881
|
-
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"][data-v-
|
|
8915
|
+
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"][data-v-fd74ff6c] {
|
|
8882
8916
|
--_tree-row-min-height: 44px;
|
|
8883
8917
|
}
|
|
8884
|
-
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .row[data-v-
|
|
8918
|
+
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .row[data-v-fd74ff6c] {
|
|
8885
8919
|
grid-template-columns: 44px var(--_tree-disclosure-size) auto minmax(0, 1fr);
|
|
8886
8920
|
}
|
|
8887
|
-
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle[data-v-
|
|
8921
|
+
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle[data-v-fd74ff6c],
|
|
8888
8922
|
html[data-ui-input-modality="touch"]
|
|
8889
8923
|
[data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"]
|
|
8890
8924
|
> .row
|
|
8891
|
-
> .drag-handle[data-v-
|
|
8925
|
+
> .drag-handle[data-v-fd74ff6c] {
|
|
8892
8926
|
position: relative;
|
|
8893
8927
|
grid-column: 1;
|
|
8894
8928
|
grid-row: 1;
|
|
@@ -8900,24 +8934,24 @@ html[data-ui-input-modality="touch"]
|
|
|
8900
8934
|
transform: none;
|
|
8901
8935
|
cursor: pointer;
|
|
8902
8936
|
}
|
|
8903
|
-
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .disclosure[data-v-
|
|
8937
|
+
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .disclosure[data-v-fd74ff6c] {
|
|
8904
8938
|
grid-column: 2;
|
|
8905
8939
|
}
|
|
8906
|
-
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .leading[data-v-
|
|
8940
|
+
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .leading[data-v-fd74ff6c] {
|
|
8907
8941
|
grid-column: 3;
|
|
8908
8942
|
}
|
|
8909
|
-
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .label[data-v-
|
|
8943
|
+
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .label[data-v-fd74ff6c] {
|
|
8910
8944
|
grid-column: 4;
|
|
8911
8945
|
}
|
|
8912
8946
|
html[data-ui-input-modality="touch"]
|
|
8913
8947
|
[data-component~="ui-tree-item"][data-selection-mode="multiple"]
|
|
8914
|
-
> .row[data-v-
|
|
8948
|
+
> .row[data-v-fd74ff6c] {
|
|
8915
8949
|
grid-template-columns: 44px var(--_tree-disclosure-size) 44px auto minmax(0, 1fr);
|
|
8916
8950
|
}
|
|
8917
8951
|
html[data-ui-input-modality="touch"]
|
|
8918
8952
|
[data-component~="ui-tree-item"][data-selection-mode="multiple"]
|
|
8919
8953
|
> .row
|
|
8920
|
-
> .selection-hit[data-v-
|
|
8954
|
+
> .selection-hit[data-v-fd74ff6c] {
|
|
8921
8955
|
grid-column: 3;
|
|
8922
8956
|
inline-size: 44px;
|
|
8923
8957
|
block-size: 44px;
|
|
@@ -8925,36 +8959,55 @@ html[data-ui-input-modality="touch"]
|
|
|
8925
8959
|
html[data-ui-input-modality="touch"]
|
|
8926
8960
|
[data-component~="ui-tree-item"][data-selection-mode="multiple"]
|
|
8927
8961
|
> .row
|
|
8928
|
-
> .leading[data-v-
|
|
8962
|
+
> .leading[data-v-fd74ff6c] {
|
|
8929
8963
|
grid-column: 4;
|
|
8930
8964
|
}
|
|
8931
8965
|
html[data-ui-input-modality="touch"]
|
|
8932
8966
|
[data-component~="ui-tree-item"][data-selection-mode="multiple"]
|
|
8933
8967
|
> .row
|
|
8934
|
-
> .label[data-v-
|
|
8968
|
+
> .label[data-v-fd74ff6c] {
|
|
8935
8969
|
grid-column: 5;
|
|
8936
8970
|
}
|
|
8971
|
+
@media (hover: none), (pointer: coarse) {
|
|
8972
|
+
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .row[data-v-fd74ff6c] {
|
|
8973
|
+
grid-template-columns: 44px var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
|
|
8974
|
+
}
|
|
8975
|
+
html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .actions[data-v-fd74ff6c] {
|
|
8976
|
+
grid-column: 5;
|
|
8977
|
+
}
|
|
8978
|
+
html[data-ui-input-modality="touch"]
|
|
8979
|
+
[data-component~="ui-tree-item"][data-selection-mode="multiple"]
|
|
8980
|
+
> .row[data-v-fd74ff6c] {
|
|
8981
|
+
grid-template-columns: 44px var(--_tree-disclosure-size) 44px auto minmax(0, 1fr) auto;
|
|
8982
|
+
}
|
|
8983
|
+
html[data-ui-input-modality="touch"]
|
|
8984
|
+
[data-component~="ui-tree-item"][data-selection-mode="multiple"]
|
|
8985
|
+
> .row
|
|
8986
|
+
> .actions[data-v-fd74ff6c] {
|
|
8987
|
+
grid-column: 6;
|
|
8988
|
+
}
|
|
8989
|
+
}
|
|
8937
8990
|
@media (prefers-reduced-motion: reduce) {
|
|
8938
|
-
.row[data-v-
|
|
8939
|
-
.disclosure-icon[data-v-
|
|
8940
|
-
.drag-handle[data-v-
|
|
8991
|
+
.row[data-v-fd74ff6c],
|
|
8992
|
+
.disclosure-icon[data-v-fd74ff6c],
|
|
8993
|
+
.drag-handle[data-v-fd74ff6c] {
|
|
8941
8994
|
transition: none;
|
|
8942
8995
|
}
|
|
8943
8996
|
}
|
|
8944
8997
|
@media (forced-colors: active) {
|
|
8945
|
-
[data-component~="ui-tree-item"]:focus-visible > .row[data-v-
|
|
8998
|
+
[data-component~="ui-tree-item"]:focus-visible > .row[data-v-fd74ff6c] {
|
|
8946
8999
|
outline: var(--ui-focus-width) solid Highlight;
|
|
8947
9000
|
outline-offset: calc(-1 * var(--ui-focus-width));
|
|
8948
9001
|
}
|
|
8949
9002
|
[data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"]:not(:focus-visible):not([aria-disabled="true"])
|
|
8950
|
-
> .row[data-v-
|
|
9003
|
+
> .row[data-v-fd74ff6c] {
|
|
8951
9004
|
outline: var(--ui-border-width) solid Highlight;
|
|
8952
9005
|
outline-offset: calc(-1 * var(--ui-border-width));
|
|
8953
9006
|
}
|
|
8954
9007
|
}
|
|
8955
9008
|
|
|
8956
9009
|
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
8957
|
-
[data-component~="ui-tree-item"][hidden][data-v-
|
|
9010
|
+
[data-component~="ui-tree-item"][hidden][data-v-fd74ff6c] {
|
|
8958
9011
|
display: none;
|
|
8959
9012
|
}
|
|
8960
9013
|
/**
|
|
@@ -23,9 +23,10 @@ export type LoomaImageUploader = (file: File) => Promise<string | LoomaImageUplo
|
|
|
23
23
|
/**
|
|
24
24
|
* Chooses whether formatting controls follow a selection, occupy persistent
|
|
25
25
|
* editor chrome, or open from an app-owned button (`popover`, with a text-only
|
|
26
|
-
* bubble for selections)
|
|
26
|
+
* bubble for selections). `contextual` exposes all commands at a focused caret
|
|
27
|
+
* as well as a selection; it does not alter document commands or stored content.
|
|
27
28
|
*/
|
|
28
|
-
export type LoomaEditorToolbarMode = "bubble" | "sticky" | "popover";
|
|
29
|
+
export type LoomaEditorToolbarMode = "bubble" | "sticky" | "popover" | "contextual";
|
|
29
30
|
/** A destination supplied by the host application, such as a page or record. */
|
|
30
31
|
export interface LoomaLinkTarget {
|
|
31
32
|
id: string;
|