@threadlabs/looma 0.5.2 → 0.6.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/components/shared/overlay.js +3 -0
  2. package/components/ui-button/ui-button.html +14 -14
  3. package/components/ui-callout/ui-callout.html +1 -1
  4. package/components/ui-checkbox/ui-checkbox.html +1 -1
  5. package/components/ui-cluster/ui-cluster.html +6 -6
  6. package/components/ui-combobox/ui-combobox.html +23 -23
  7. package/components/ui-container/ui-container.html +4 -4
  8. package/components/ui-context-menu/ui-context-menu.html +2 -2
  9. package/components/ui-dialog/ui-dialog.html +12 -12
  10. package/components/ui-disclosure/ui-disclosure.html +19 -4
  11. package/components/ui-editable/ui-editable.html +6 -6
  12. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +20 -20
  13. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +25 -25
  14. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +39 -39
  15. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +20 -20
  16. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +48 -48
  17. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +34 -34
  18. package/components/ui-editor-toolbar/ui-editor-toolbar.html +9 -9
  19. package/components/ui-floating-action-button/ui-floating-action-button.html +16 -22
  20. package/components/ui-grid/ui-grid.html +6 -6
  21. package/components/ui-icon-button/ui-icon-button.html +42 -38
  22. package/components/ui-input/ui-input.html +2 -2
  23. package/components/ui-menu/ui-menu.html +15 -4
  24. package/components/ui-menu-item/ui-menu-item.html +5 -5
  25. package/components/ui-popover/ui-popover.html +3 -3
  26. package/components/ui-reel/ui-reel.html +6 -6
  27. package/components/ui-search-result-row/ui-search-result-row.html +9 -9
  28. package/components/ui-search-shell/ui-search-shell.html +3 -3
  29. package/components/ui-select/ui-select.html +2 -2
  30. package/components/ui-sidebar/ui-sidebar.html +11 -11
  31. package/components/ui-stack/ui-stack.html +6 -6
  32. package/components/ui-switcher/ui-switcher.html +6 -6
  33. package/components/ui-tabs/ui-tabs.html +18 -4
  34. package/components/ui-textarea/ui-textarea.html +2 -2
  35. package/components/ui-toast-region/ui-toast-region.html +2 -2
  36. package/components/ui-tooltip/ui-tooltip.html +1 -1
  37. package/components/ui-top-bar/ui-top-bar.html +5 -5
  38. package/components/ui-tree/ui-tree.html +7 -0
  39. package/components/ui-tree-item/ui-tree-item.html +15 -7
  40. package/dist/index.js +1 -1
  41. package/package.json +1 -1
  42. package/styles/ui-button.css +14 -14
  43. package/styles/ui-callout.css +1 -1
  44. package/styles/ui-checkbox.css +1 -1
  45. package/styles/ui-cluster.css +6 -6
  46. package/styles/ui-combobox.css +23 -23
  47. package/styles/ui-container.css +4 -4
  48. package/styles/ui-context-menu.css +2 -2
  49. package/styles/ui-dialog.css +12 -12
  50. package/styles/ui-disclosure.css +22 -6
  51. package/styles/ui-editable.css +6 -6
  52. package/styles/ui-editor-insert-table-grid.css +20 -20
  53. package/styles/ui-editor-mention-menu.css +25 -25
  54. package/styles/ui-editor-slash-menu.css +39 -39
  55. package/styles/ui-editor-table-context-menu.css +20 -20
  56. package/styles/ui-editor-table-overlay.css +48 -48
  57. package/styles/ui-editor-table-toolbar.css +34 -34
  58. package/styles/ui-editor-toolbar.css +9 -9
  59. package/styles/ui-floating-action-button.css +16 -22
  60. package/styles/ui-grid.css +6 -6
  61. package/styles/ui-icon-button.css +42 -38
  62. package/styles/ui-input.css +2 -2
  63. package/styles/ui-menu-item.css +5 -5
  64. package/styles/ui-menu.css +18 -6
  65. package/styles/ui-popover.css +3 -3
  66. package/styles/ui-reel.css +6 -6
  67. package/styles/ui-search-result-row.css +9 -9
  68. package/styles/ui-search-shell.css +3 -3
  69. package/styles/ui-select.css +2 -2
  70. package/styles/ui-sidebar.css +11 -11
  71. package/styles/ui-stack.css +6 -6
  72. package/styles/ui-switcher.css +6 -6
  73. package/styles/ui-tabs.css +20 -6
  74. package/styles/ui-textarea.css +2 -2
  75. package/styles/ui-toast-region.css +2 -2
  76. package/styles/ui-tooltip.css +1 -1
  77. package/styles/ui-top-bar.css +5 -5
  78. package/styles/ui-tree-item.css +21 -8
  79. package/styles/ui-tree.css +7 -1
  80. package/theme-dark.css +42 -103
  81. package/theme-high-contrast.css +18 -22
  82. package/theme-light.css +15 -41
  83. package/tokens.css +149 -201
  84. package/vanilla/UiDisclosure.d.ts +1 -0
  85. package/vanilla/UiDisclosure.js +1 -1
  86. package/vanilla/UiMenu.d.ts +1 -0
  87. package/vanilla/UiMenu.js +1 -1
  88. package/vanilla/UiTabs.d.ts +1 -0
  89. package/vanilla/UiTabs.js +1 -1
  90. package/vanilla/UiTree.d.ts +1 -0
  91. package/vanilla/UiTree.js +1 -1
  92. package/vue/UiButton.vue +20 -14
  93. package/vue/UiCallout.vue +1 -1
  94. package/vue/UiCheckbox.vue +1 -1
  95. package/vue/UiCluster.vue +6 -6
  96. package/vue/UiCombobox.vue +23 -23
  97. package/vue/UiContainer.vue +4 -4
  98. package/vue/UiContextMenu.vue +2 -2
  99. package/vue/UiDialog.vue +12 -12
  100. package/vue/UiDisclosure.d.ts +2 -0
  101. package/vue/UiDisclosure.vue +21 -4
  102. package/vue/UiEditable.vue +6 -6
  103. package/vue/UiEditorInsertTableGrid.vue +20 -20
  104. package/vue/UiEditorMentionMenu.vue +25 -25
  105. package/vue/UiEditorSlashMenu.vue +39 -39
  106. package/vue/UiEditorTableContextMenu.vue +20 -20
  107. package/vue/UiEditorTableOverlay.vue +48 -57
  108. package/vue/UiEditorTableToolbar.vue +34 -34
  109. package/vue/UiEditorToolbar.vue +9 -9
  110. package/vue/UiFloatingActionButton.vue +17 -22
  111. package/vue/UiGrid.vue +6 -6
  112. package/vue/UiIconButton.vue +46 -42
  113. package/vue/UiInput.vue +2 -2
  114. package/vue/UiMenu.d.ts +2 -0
  115. package/vue/UiMenu.vue +17 -7
  116. package/vue/UiMenuItem.vue +6 -5
  117. package/vue/UiPopover.vue +3 -3
  118. package/vue/UiReel.vue +6 -6
  119. package/vue/UiSearchResultRow.vue +10 -13
  120. package/vue/UiSearchShell.vue +3 -3
  121. package/vue/UiSelect.vue +2 -2
  122. package/vue/UiSidebar.vue +11 -16
  123. package/vue/UiStack.vue +6 -6
  124. package/vue/UiSwitcher.vue +6 -6
  125. package/vue/UiTabs.d.ts +2 -0
  126. package/vue/UiTabs.vue +21 -4
  127. package/vue/UiTextarea.vue +2 -2
  128. package/vue/UiToastRegion.vue +2 -2
  129. package/vue/UiTooltip.vue +1 -1
  130. package/vue/UiTopBar.vue +5 -5
  131. package/vue/UiTree.d.ts +2 -0
  132. package/vue/UiTree.vue +24 -1
  133. package/vue/UiTreeItem.vue +16 -8
  134. package/vue/chunks/UiButton.js +1 -1
  135. package/vue/chunks/UiCallout.js +1 -1
  136. package/vue/chunks/UiCheckbox.js +1 -1
  137. package/vue/chunks/UiCluster.js +1 -1
  138. package/vue/chunks/UiCombobox.js +1 -1
  139. package/vue/chunks/UiContainer.js +1 -1
  140. package/vue/chunks/UiContextMenu.js +1 -1
  141. package/vue/chunks/UiDialog.js +1 -1
  142. package/vue/chunks/UiDisclosure.js +3 -2
  143. package/vue/chunks/UiEditable.js +1 -1
  144. package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
  145. package/vue/chunks/UiEditorMentionMenu.js +1 -1
  146. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  147. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  148. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  149. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  150. package/vue/chunks/UiEditorToolbar.js +1 -1
  151. package/vue/chunks/UiFloatingActionButton.js +1 -1
  152. package/vue/chunks/UiGrid.js +1 -1
  153. package/vue/chunks/UiIconButton.js +1 -1
  154. package/vue/chunks/UiInput.js +1 -1
  155. package/vue/chunks/UiMenu.js +3 -2
  156. package/vue/chunks/UiMenuItem.js +1 -1
  157. package/vue/chunks/UiPopover.js +1 -1
  158. package/vue/chunks/UiReel.js +1 -1
  159. package/vue/chunks/UiSearchResultRow.js +1 -1
  160. package/vue/chunks/UiSearchShell.js +1 -1
  161. package/vue/chunks/UiSelect.js +1 -1
  162. package/vue/chunks/UiSidebar.js +1 -1
  163. package/vue/chunks/UiStack.js +1 -1
  164. package/vue/chunks/UiSwitcher.js +1 -1
  165. package/vue/chunks/UiTabs.js +7 -2
  166. package/vue/chunks/UiTextarea.js +1 -1
  167. package/vue/chunks/UiToastRegion.js +1 -1
  168. package/vue/chunks/UiTooltip.js +1 -1
  169. package/vue/chunks/UiTopBar.js +1 -1
  170. package/vue/chunks/UiTree.js +8 -2
  171. package/vue/chunks/UiTreeItem.js +1 -1
  172. package/vue/components.css +1082 -1048
  173. package/vue/editor/LoomaEditor.d.ts +11 -0
  174. package/vue/editor/index.js +9 -0
@@ -18,18 +18,18 @@
18
18
  inline-size: 100%;
19
19
  min-block-size: var(--ui-search-result-row-min-height, 56px);
20
20
  margin: 0;
21
- padding-block: var(--ui-search-result-row-padding-block, var(--ui-space-3, 0.75rem));
22
- padding-inline: var(--ui-search-result-row-padding-inline, var(--ui-space-4, 1rem));
21
+ padding-block: var(--ui-search-result-row-padding-block, var(--ui-space-3));
22
+ padding-inline: var(--ui-search-result-row-padding-inline, var(--ui-space-4));
23
23
  display: flex;
24
24
  align-items: flex-start;
25
- gap: var(--ui-search-result-row-gap, var(--ui-space-3, 0.75rem));
26
- background: var(--ui-search-result-row-bg, transparent);
25
+ gap: var(--ui-search-result-row-gap, var(--ui-space-3));
26
+ background: var(--ui-search-result-row-surface, transparent);
27
27
  border: none;
28
- border-block-end: 1px solid var(--ui-search-result-row-border, var(--ui-border, #e5e7eb));
28
+ border-block-end: 1px solid var(--ui-search-result-row-border, var(--ui-border));
29
29
  color: inherit;
30
30
  cursor: pointer;
31
31
  text-align: left;
32
- transition: background-color var(--ui-motion-fast, 160ms) var(--ui-motion-ease, ease);
32
+ transition: background-color var(--ui-motion-fast) var(--ui-motion-ease);
33
33
  }
34
34
 
35
35
  :host:last-child {
@@ -37,18 +37,18 @@
37
37
  }
38
38
 
39
39
  :host:hover:enabled {
40
- background: var(--ui-search-result-row-hover-bg, color-mix(in srgb, var(--ui-surface, #ffffff) 85%, black 3%));
40
+ background: var(--ui-search-result-row-hover-surface, color-mix(in srgb, var(--ui-surface) 85%, black 3%));
41
41
  }
42
42
 
43
43
  :host-state([selected]) {
44
44
  background: var(
45
45
  --ui-search-result-row-selected-bg,
46
- var(--ui-search-result-row-hover-bg, color-mix(in srgb, var(--ui-surface, #ffffff) 85%, black 3%))
46
+ var(--ui-search-result-row-hover-surface, color-mix(in srgb, var(--ui-surface) 85%, black 3%))
47
47
  );
48
48
  }
49
49
 
50
50
  :host:focus-visible {
51
- outline: 2px solid var(--ui-focus-ring, #2563eb);
51
+ outline: 2px solid var(--ui-focus-ring);
52
52
  outline-offset: -2px;
53
53
  }
54
54
 
@@ -55,7 +55,7 @@
55
55
  max-block-size: var(--ui-search-shell-max-height, 80vh);
56
56
  margin-inline: auto;
57
57
  overflow: hidden;
58
- background: var(--ui-search-shell-bg, var(--ui-surface-elevated));
58
+ background: var(--ui-search-shell-surface, var(--ui-surface-elevated));
59
59
  border: 1px solid var(--ui-search-shell-border, var(--ui-border-default));
60
60
  border-radius: var(--ui-search-shell-radius, var(--ui-radius-dialog));
61
61
  box-shadow: var(--ui-search-shell-shadow, var(--ui-elevation-dialog, var(--ui-shadow-xl)));
@@ -79,7 +79,7 @@
79
79
  min-block-size: var(--ui-control-min-block-size);
80
80
  padding: var(--ui-space-2) var(--ui-space-3);
81
81
  border: 1px solid var(--ui-control-border);
82
- border-radius: var(--ui-radius-2);
82
+ border-radius: var(--ui-radius-md);
83
83
  background: var(--ui-control-surface);
84
84
  color: var(--ui-text-primary);
85
85
  font: inherit;
@@ -88,7 +88,7 @@
88
88
 
89
89
  :slotted(input[slot="search"]:focus-visible) {
90
90
  border-color: var(--ui-control-focus);
91
- outline: 2px solid var(--ui-focus-ring, currentColor);
91
+ outline: 2px solid var(--ui-focus-ring);
92
92
  outline-offset: 2px;
93
93
  }
94
94
 
@@ -13,11 +13,11 @@
13
13
  display: inline-block;
14
14
  inline-size: 100%;
15
15
  min-inline-size: 0;
16
- min-block-size: var(--ui-control-size-md, 2.5rem);
16
+ min-block-size: var(--ui-control-size-md);
17
17
  margin: 0;
18
18
  padding: var(--ui-space-2) var(--ui-space-3);
19
19
  border: 1px solid var(--ui-control-border, var(--ui-border-strong));
20
- border-radius: var(--ui-select-radius, var(--ui-radius-2));
20
+ border-radius: var(--ui-select-radius, var(--ui-radius-md));
21
21
  background-color: var(--ui-control-surface, var(--ui-surface-elevated));
22
22
  color: var(--ui-text-primary);
23
23
  color-scheme: light dark;
@@ -91,10 +91,10 @@
91
91
  inset-inline-start: 3px;
92
92
  inline-size: 2px;
93
93
  background: color-mix(in srgb, var(--ui-affordance-guide-color, var(--ui-border-strong)) 45%, transparent);
94
- opacity: var(--ui-affordance-guide-opacity, 0.42);
94
+ opacity: var(--ui-affordance-guide-opacity);
95
95
  transition:
96
- background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
97
- opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
96
+ background-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
97
+ opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
98
98
  }
99
99
 
100
100
  .guide {
@@ -103,17 +103,17 @@
103
103
  inset-inline-start: 50%;
104
104
  inline-size: 6px;
105
105
  block-size: 22px;
106
- border: 1px solid var(--ui-border-strong, #c8c8c4);
107
- border-radius: var(--ui-radius-round, 999px);
108
- background: var(--ui-surface-elevated, #fff);
106
+ border: 1px solid var(--ui-border-strong);
107
+ border-radius: var(--ui-radius-round);
108
+ background: var(--ui-surface-elevated);
109
109
  opacity: 0;
110
110
  transform: translate(-50%, -50%);
111
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
111
+ transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
112
112
  pointer-events: none;
113
113
  }
114
114
 
115
115
  .resizer:is(:hover, :focus-visible)::after {
116
- background: var(--ui-affordance-direct-color, var(--ui-accent-solid, var(--ui-color-focus, Highlight)));
116
+ background: var(--ui-affordance-direct-color, var(--ui-accent-solid, var(--ui-focus-ring)));
117
117
  opacity: 1;
118
118
  }
119
119
 
@@ -136,9 +136,9 @@
136
136
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
137
137
  transform: translateX(0);
138
138
  transition:
139
- transform var(--ui-motion-base, 0.2s) var(--ui-motion-ease-out, ease-out),
140
- display var(--ui-motion-base, 0.2s) allow-discrete,
141
- overlay var(--ui-motion-base, 0.2s) allow-discrete;
139
+ transform var(--ui-motion-base) var(--ui-motion-ease-out),
140
+ display var(--ui-motion-base) allow-discrete,
141
+ overlay var(--ui-motion-base) allow-discrete;
142
142
  }
143
143
 
144
144
  /* The author display above would otherwise override the UA rule that hides a closed popover. */
@@ -7,7 +7,7 @@
7
7
  <div><slot></slot></div>
8
8
  <style>
9
9
  :host {
10
- --_layout-gap: var(--ui-space-4, 1rem);
10
+ --_layout-gap: var(--ui-space-4);
11
11
  display: flex;
12
12
  flex-direction: column;
13
13
  align-items: stretch;
@@ -18,19 +18,19 @@
18
18
  }
19
19
 
20
20
  :host-state([gap="xs"]) {
21
- --_layout-gap: var(--ui-space-2, 0.5rem);
21
+ --_layout-gap: var(--ui-space-2);
22
22
  }
23
23
  :host-state([gap="s"]) {
24
- --_layout-gap: var(--ui-space-3, 0.75rem);
24
+ --_layout-gap: var(--ui-space-3);
25
25
  }
26
26
  :host-state([gap="m"]) {
27
- --_layout-gap: var(--ui-space-4, 1rem);
27
+ --_layout-gap: var(--ui-space-4);
28
28
  }
29
29
  :host-state([gap="l"]) {
30
- --_layout-gap: var(--ui-space-5, 1.5rem);
30
+ --_layout-gap: var(--ui-space-5);
31
31
  }
32
32
  :host-state([gap="xl"]) {
33
- --_layout-gap: var(--ui-space-6, 2rem);
33
+ --_layout-gap: var(--ui-space-6);
34
34
  }
35
35
  :host-state([align="start"]) {
36
36
  align-items: flex-start;
@@ -7,7 +7,7 @@
7
7
  <div><slot></slot></div>
8
8
  <style>
9
9
  :host {
10
- --_switcher-gap: var(--ui-space-4, 1rem);
10
+ --_switcher-gap: var(--ui-space-4);
11
11
  display: flex;
12
12
  flex-wrap: wrap;
13
13
  gap: var(--ui-switcher-gap, var(--_switcher-gap));
@@ -24,19 +24,19 @@
24
24
  }
25
25
 
26
26
  :host-state([gap="xs"]) {
27
- --_switcher-gap: var(--ui-space-2, 0.5rem);
27
+ --_switcher-gap: var(--ui-space-2);
28
28
  }
29
29
  :host-state([gap="s"]) {
30
- --_switcher-gap: var(--ui-space-3, 0.75rem);
30
+ --_switcher-gap: var(--ui-space-3);
31
31
  }
32
32
  :host-state([gap="m"]) {
33
- --_switcher-gap: var(--ui-space-4, 1rem);
33
+ --_switcher-gap: var(--ui-space-4);
34
34
  }
35
35
  :host-state([gap="l"]) {
36
- --_switcher-gap: var(--ui-space-5, 1.5rem);
36
+ --_switcher-gap: var(--ui-space-5);
37
37
  }
38
38
  :host-state([gap="xl"]) {
39
- --_switcher-gap: var(--ui-space-6, 2rem);
39
+ --_switcher-gap: var(--ui-space-6);
40
40
  }
41
41
  :host-state([threshold="xs"]) > :slotted(*) {
42
42
  flex-basis: calc((var(--ui-switcher-threshold, 20rem) - 100%) * 999);
@@ -1,5 +1,6 @@
1
1
  <template component="ui-tabs" controller="./ui-tabs.js">
2
2
  <defs>
3
+ <prop name="density" type="comfortable | compact" default="comfortable">Compact trades padding and type size for rows that fit more on screen.</prop>
3
4
  <prop name="label" type="string" default="Tabs">label token.</prop>
4
5
  <prop name="value" type="string" default="">value token.</prop>
5
6
  <prop name="orientation" type="horizontal | vertical" default="horizontal">orientation token.</prop>
@@ -26,6 +27,19 @@
26
27
  <div class="panels" $ref="panels"><slot></slot></div>
27
28
  </div>
28
29
  <style>
30
+ /* Density resolves into the tab row's own values; the public tokens still override them. */
31
+ :host {
32
+ --_tab-min-block-size: var(--ui-control-size);
33
+ --_tab-padding-block: var(--ui-space-2);
34
+ --_tab-padding-inline: var(--ui-space-3);
35
+ }
36
+
37
+ :host-state([density="compact"]) {
38
+ --_tab-min-block-size: var(--ui-control-size-sm);
39
+ --_tab-padding-block: var(--ui-space-1);
40
+ --_tab-padding-inline: var(--ui-space-2);
41
+ }
42
+
29
43
  :host {
30
44
  display: grid;
31
45
  inline-size: 100%;
@@ -50,16 +64,16 @@
50
64
  }
51
65
 
52
66
  .list button {
53
- min-block-size: 2.5rem;
67
+ min-block-size: var(--ui-tabs-tab-min-block-size, var(--_tab-min-block-size));
54
68
  margin: 0 0 -1px;
55
- padding: var(--ui-space-2) var(--ui-space-3);
69
+ padding: var(--ui-tabs-tab-padding-block, var(--_tab-padding-block)) var(--ui-tabs-tab-padding-inline, var(--_tab-padding-inline));
56
70
  border: 0;
57
71
  border-block-end: 2px solid transparent;
58
72
  background: transparent;
59
73
  color: var(--ui-text-secondary);
60
74
  font: inherit;
61
75
  font-size: var(--ui-font-size-sm);
62
- font-weight: var(--ui-font-medium, 500);
76
+ font-weight: var(--ui-font-medium);
63
77
  cursor: pointer;
64
78
  transition:
65
79
  color var(--ui-motion-fast) var(--ui-motion-ease),
@@ -87,7 +101,7 @@
87
101
  position: relative;
88
102
  outline: none;
89
103
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
90
- border-radius: var(--ui-radius-1);
104
+ border-radius: var(--ui-radius-sm);
91
105
  }
92
106
 
93
107
  .panels {
@@ -14,13 +14,13 @@
14
14
  display: inline-block;
15
15
  inline-size: 100%;
16
16
  min-inline-size: 0;
17
- min-block-size: calc(var(--ui-space-12, 3rem) * 2);
17
+ min-block-size: calc(3rem * 2);
18
18
  margin: 0;
19
19
  padding: var(--ui-space-2) var(--ui-space-3);
20
20
  appearance: none;
21
21
  resize: vertical;
22
22
  border: 1px solid var(--ui-control-border, var(--ui-border-strong));
23
- border-radius: var(--ui-textarea-radius, var(--ui-radius-2));
23
+ border-radius: var(--ui-textarea-radius, var(--ui-radius-md));
24
24
  background: var(--ui-control-surface, var(--ui-surface-elevated));
25
25
  color: var(--ui-text-primary);
26
26
  font: inherit;
@@ -67,7 +67,7 @@
67
67
  gap: var(--ui-space-2);
68
68
  align-items: start;
69
69
  border: 1px solid var(--ui-border-default);
70
- border-radius: var(--ui-radius-3);
70
+ border-radius: var(--ui-radius-lg);
71
71
  padding: var(--ui-space-3) var(--ui-space-4);
72
72
  background: var(--ui-surface-elevated);
73
73
  color: var(--ui-text-primary);
@@ -77,7 +77,7 @@
77
77
 
78
78
  /* Leaving slides on down and fades; the controller removes the toast when this ends. */
79
79
  .toast.closing {
80
- animation: ui-toast-exit var(--ui-toast-exit-duration, 0.22s) var(--ui-motion-ease, ease) both;
80
+ animation: ui-toast-exit var(--ui-toast-exit-duration, 0.22s) var(--ui-motion-ease) both;
81
81
  pointer-events: none;
82
82
  }
83
83
 
@@ -46,7 +46,7 @@
46
46
  box-sizing: border-box;
47
47
  max-inline-size: var(--ui-tooltip-max-inline-size, 18rem);
48
48
  border: 1px solid var(--_tooltip-line);
49
- border-radius: var(--ui-tooltip-radius, var(--ui-radius-1));
49
+ border-radius: var(--ui-tooltip-radius, var(--ui-radius-sm));
50
50
  background: var(--ui-tooltip-surface, var(--ui-surface-elevated));
51
51
  color: var(--ui-tooltip-text, var(--ui-text-primary));
52
52
  padding: var(--ui-space-1) var(--ui-space-2);
@@ -13,11 +13,11 @@
13
13
  min-block-size: calc(var(--ui-top-bar-height, 56px) + env(safe-area-inset-top));
14
14
  display: flex;
15
15
  align-items: center;
16
- gap: var(--ui-top-bar-gap, var(--ui-space-3, 0.75rem));
16
+ gap: var(--ui-top-bar-gap, var(--ui-space-3));
17
17
  padding-block-start: env(safe-area-inset-top);
18
- padding-inline-start: max(var(--ui-top-bar-padding-inline, var(--ui-space-4, 1rem)), env(safe-area-inset-left));
19
- padding-inline-end: max(var(--ui-top-bar-padding-inline, var(--ui-space-4, 1rem)), env(safe-area-inset-right));
20
- background: var(--ui-top-bar-bg, var(--ui-surface-elevated));
18
+ padding-inline-start: max(var(--ui-top-bar-padding-inline, var(--ui-space-4)), env(safe-area-inset-left));
19
+ padding-inline-end: max(var(--ui-top-bar-padding-inline, var(--ui-space-4)), env(safe-area-inset-right));
20
+ background: var(--ui-top-bar-surface, var(--ui-surface-elevated));
21
21
  border-block-end: 1px solid var(--ui-top-bar-border, var(--ui-border-default));
22
22
  }
23
23
 
@@ -30,7 +30,7 @@
30
30
  }
31
31
 
32
32
  .actions {
33
- gap: var(--ui-top-bar-actions-gap, var(--ui-space-1, 0.25rem));
33
+ gap: var(--ui-top-bar-actions-gap, var(--ui-space-1));
34
34
  }
35
35
 
36
36
  .title {
@@ -1,6 +1,7 @@
1
1
  <link rel="component" href="../ui-tree-item/ui-tree-item.html">
2
2
  <template component="ui-tree" controller="./ui-tree.js">
3
3
  <defs>
4
+ <prop name="density" type="comfortable | compact" default="comfortable">Compact trades padding and type size for rows that fit more on screen.</prop>
4
5
  <prop name="label" type="string" default="Tree">label token.</prop>
5
6
  <prop name="hoverExpandDelay" type="number" default="700">hoverExpandDelay token.</prop>
6
7
  <prop name="maxDepth" type="number" default="0">maxDepth token.</prop>
@@ -15,6 +16,12 @@
15
16
  </defs>
16
17
  <div role="tree"><slot></slot></div>
17
18
  <style>
19
+ :host-state([density="compact"]) {
20
+ --ui-tree-item-min-block-size: var(--ui-control-size-sm);
21
+ --ui-tree-item-font-size: var(--ui-font-size-sm);
22
+ --ui-tree-item-label-padding-block: 0;
23
+ }
24
+
18
25
  :host {
19
26
  display: block;
20
27
  min-inline-size: 0;
@@ -84,9 +84,9 @@
84
84
  display: grid;
85
85
  grid-template-columns: 20px auto minmax(0, 1fr) auto;
86
86
  align-items: center;
87
- min-block-size: var(--ui-tree-row-min-height, var(--_tree-row-min-height));
87
+ min-block-size: var(--ui-tree-item-min-block-size, var(--_tree-row-min-height));
88
88
  min-inline-size: 0;
89
- font-size: var(--ui-tree-font-size, var(--ui-font-size-ui, 0.9375rem));
89
+ font-size: var(--ui-tree-item-font-size, var(--ui-font-size-ui));
90
90
  border-radius: var(--ui-radius-md);
91
91
  color: var(--ui-text-secondary);
92
92
  transition:
@@ -120,7 +120,8 @@
120
120
  box-shadow: 0 0 0 2px var(--ui-focus-ring);
121
121
  }
122
122
 
123
- :host[data-drop-position="inside"] .row {
123
+ /* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
124
+ :host[data-drop-position="inside"] > .row {
124
125
  background: var(--ui-accent-subtle);
125
126
  box-shadow: inset 0 0 0 1px var(--ui-tree-drop-color, var(--ui-accent-solid));
126
127
  }
@@ -218,7 +219,14 @@
218
219
  display: flex;
219
220
  align-items: center;
220
221
  min-inline-size: 0;
221
- padding: var(--ui-tree-label-padding-block, var(--ui-space-1)) var(--ui-tree-label-padding-inline, var(--ui-space-2));
222
+ padding: var(--ui-tree-item-label-padding-block, var(--ui-space-1)) var(--ui-tree-item-label-padding-inline, var(--ui-space-2));
223
+ }
224
+
225
+ /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
226
+ its own text and reading as overflow. */
227
+ .label > :slotted(*) {
228
+ flex: 1 1 auto;
229
+ min-inline-size: 0;
222
230
  }
223
231
 
224
232
  .actions {
@@ -254,7 +262,7 @@
254
262
  .row:hover .drag-handle,
255
263
  .drag-handle:hover,
256
264
  .drag-handle:focus-visible,
257
- :host[data-dragging] .drag-handle {
265
+ :host[data-dragging] > .row > .drag-handle {
258
266
  opacity: 1;
259
267
  }
260
268
 
@@ -293,12 +301,12 @@
293
301
  inset-inline-end: -1px;
294
302
  }
295
303
 
296
- :host[data-drop-position="before"] .row-drop-indicator {
304
+ :host[data-drop-position="before"] > .row > .row-drop-indicator {
297
305
  display: block;
298
306
  inset-block-start: -1px;
299
307
  }
300
308
 
301
- :host[data-drop-position="after"] .subtree-drop-indicator {
309
+ :host[data-drop-position="after"] > .subtree-drop-indicator {
302
310
  display: block;
303
311
  inset-block-end: -1px;
304
312
  }