@threadlabs/looma 0.22.13 → 0.23.0

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 (257) hide show
  1. package/components/shared/icons.js +6 -0
  2. package/components/ui-avatar/ui-avatar.html +3 -3
  3. package/components/ui-avatar-group/ui-avatar-group.html +1 -1
  4. package/components/ui-badge/ui-badge.html +1 -1
  5. package/components/ui-button/ui-button.html +3 -3
  6. package/components/ui-callout/ui-callout.html +3 -2
  7. package/components/ui-card/ui-card.html +23 -4
  8. package/components/ui-checkbox/ui-checkbox.html +3 -3
  9. package/components/ui-combobox/ui-combobox.html +8 -8
  10. package/components/ui-context-menu/ui-context-menu.html +2 -2
  11. package/components/ui-description-list/ui-description-list.html +1 -1
  12. package/components/ui-dialog/ui-dialog.html +3 -3
  13. package/components/ui-disclosure/ui-disclosure.html +43 -3
  14. package/components/ui-editable/ui-editable.html +2 -2
  15. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +5 -5
  16. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +2 -2
  17. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +6 -6
  18. package/components/ui-editor-slash-menu-item/ui-editor-slash-menu-item.html +1 -1
  19. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +2 -2
  20. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +11 -11
  21. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +5 -5
  22. package/components/ui-editor-toolbar/ui-editor-toolbar.html +4 -4
  23. package/components/ui-floating-action-button/ui-floating-action-button.html +2 -2
  24. package/components/ui-icon/ui-icon.html +6 -0
  25. package/components/ui-icon-button/ui-icon-button.html +1 -1
  26. package/components/ui-input/ui-input.html +9 -4
  27. package/components/ui-input-group/ui-input-group.html +21 -6
  28. package/components/ui-list/ui-list.html +1 -1
  29. package/components/ui-list-item/ui-list-item.html +20 -4
  30. package/components/ui-listbox/ui-listbox.html +3 -3
  31. package/components/ui-menu/ui-menu.html +2 -2
  32. package/components/ui-menu-item/ui-menu-item.html +4 -4
  33. package/components/ui-meter/ui-meter.html +1 -1
  34. package/components/ui-nav-item/ui-nav-item.html +46 -14
  35. package/components/ui-popover/ui-popover.html +16 -1
  36. package/components/ui-radio/ui-radio.html +2 -2
  37. package/components/ui-scroll-area/ui-scroll-area.html +12 -0
  38. package/components/ui-search-result-row/ui-search-result-row.html +24 -5
  39. package/components/ui-search-shell/ui-search-shell.html +4 -4
  40. package/components/ui-section/ui-section.html +3 -3
  41. package/components/ui-select/ui-select.html +6 -2
  42. package/components/ui-separator/ui-separator.html +2 -2
  43. package/components/ui-sidebar/ui-sidebar.html +3 -3
  44. package/components/ui-stack/ui-stack.html +6 -3
  45. package/components/ui-status-message/ui-status-message.html +1 -1
  46. package/components/ui-switch/ui-switch.html +3 -3
  47. package/components/ui-table/ui-table.html +3 -3
  48. package/components/ui-tabs/ui-tabs.html +7 -7
  49. package/components/ui-text/ui-text.html +12 -0
  50. package/components/ui-textarea/ui-textarea.html +6 -2
  51. package/components/ui-toast/ui-toast.html +2 -2
  52. package/components/ui-toast-region/ui-toast-region.html +5 -5
  53. package/components/ui-tooltip/ui-tooltip.html +15 -15
  54. package/components/ui-top-bar/ui-top-bar.html +1 -1
  55. package/components/ui-tree-item/ui-tree-item.html +27 -8
  56. package/dist/index.js +1 -1
  57. package/editor/chunks/extensions.js +55 -2
  58. package/editor/extensions/index.d.ts +1 -0
  59. package/editor/extensions/index.js +2 -2
  60. package/editor/extensions/preset.d.ts +2 -0
  61. package/editor/extensions/relative-links.d.ts +8 -0
  62. package/editor/icons.d.ts +6 -0
  63. package/editor/index.js +9 -3
  64. package/package.json +1 -1
  65. package/styles/ui-avatar-group.css +1 -1
  66. package/styles/ui-avatar.css +3 -3
  67. package/styles/ui-badge.css +1 -1
  68. package/styles/ui-button.css +3 -3
  69. package/styles/ui-callout.css +3 -2
  70. package/styles/ui-card.css +19 -2
  71. package/styles/ui-checkbox.css +3 -3
  72. package/styles/ui-combobox.css +8 -8
  73. package/styles/ui-context-menu.css +2 -2
  74. package/styles/ui-description-list.css +1 -1
  75. package/styles/ui-dialog.css +3 -3
  76. package/styles/ui-disclosure.css +42 -2
  77. package/styles/ui-editable.css +2 -2
  78. package/styles/ui-editor-insert-table-grid.css +5 -5
  79. package/styles/ui-editor-mention-menu.css +2 -2
  80. package/styles/ui-editor-slash-menu-item.css +1 -1
  81. package/styles/ui-editor-slash-menu.css +6 -6
  82. package/styles/ui-editor-table-context-menu.css +2 -2
  83. package/styles/ui-editor-table-overlay.css +11 -11
  84. package/styles/ui-editor-table-toolbar.css +5 -5
  85. package/styles/ui-editor-toolbar.css +4 -4
  86. package/styles/ui-floating-action-button.css +2 -2
  87. package/styles/ui-icon-button.css +1 -1
  88. package/styles/ui-input-group.css +19 -6
  89. package/styles/ui-input.css +9 -4
  90. package/styles/ui-list-item.css +23 -4
  91. package/styles/ui-list.css +1 -1
  92. package/styles/ui-listbox.css +3 -3
  93. package/styles/ui-menu-item.css +4 -4
  94. package/styles/ui-menu.css +2 -2
  95. package/styles/ui-meter.css +1 -1
  96. package/styles/ui-nav-item.css +46 -12
  97. package/styles/ui-popover.css +14 -1
  98. package/styles/ui-radio.css +2 -2
  99. package/styles/ui-scroll-area.css +10 -0
  100. package/styles/ui-search-result-row.css +25 -5
  101. package/styles/ui-search-shell.css +4 -4
  102. package/styles/ui-section.css +3 -3
  103. package/styles/ui-select.css +6 -2
  104. package/styles/ui-separator.css +2 -2
  105. package/styles/ui-sidebar.css +3 -3
  106. package/styles/ui-stack.css +3 -0
  107. package/styles/ui-status-message.css +1 -1
  108. package/styles/ui-switch.css +3 -3
  109. package/styles/ui-table.css +3 -3
  110. package/styles/ui-tabs.css +7 -7
  111. package/styles/ui-text.css +8 -0
  112. package/styles/ui-textarea.css +6 -2
  113. package/styles/ui-toast-region.css +5 -5
  114. package/styles/ui-toast.css +2 -2
  115. package/styles/ui-tooltip.css +15 -15
  116. package/styles/ui-top-bar.css +1 -1
  117. package/styles/ui-tree-item.css +32 -8
  118. package/tokens.css +30 -9
  119. package/vanilla/UiCard.d.ts +2 -1
  120. package/vanilla/UiCard.js +1 -1
  121. package/vanilla/UiDisclosure.d.ts +1 -0
  122. package/vanilla/UiDisclosure.js +10 -1
  123. package/vanilla/UiIcon.js +1 -1
  124. package/vanilla/UiInputGroup.d.ts +1 -0
  125. package/vanilla/UiInputGroup.js +1 -1
  126. package/vanilla/UiNavItem.d.ts +2 -0
  127. package/vanilla/UiNavItem.js +1 -1
  128. package/vanilla/UiPopover.d.ts +1 -0
  129. package/vanilla/UiPopover.js +1 -1
  130. package/vanilla/UiScrollArea.d.ts +1 -0
  131. package/vanilla/UiScrollArea.js +1 -1
  132. package/vanilla/UiSearchResultRow.d.ts +1 -0
  133. package/vanilla/UiSearchResultRow.js +1 -1
  134. package/vanilla/UiStack.d.ts +1 -1
  135. package/vanilla/UiStack.js +1 -1
  136. package/vanilla/UiText.d.ts +2 -0
  137. package/vanilla/UiText.js +1 -1
  138. package/vue/UiAvatar.vue +3 -3
  139. package/vue/UiAvatarGroup.vue +1 -1
  140. package/vue/UiBadge.vue +2 -1
  141. package/vue/UiButton.vue +3 -3
  142. package/vue/UiCallout.vue +2 -2
  143. package/vue/UiCard.d.ts +12 -3
  144. package/vue/UiCard.vue +51 -7
  145. package/vue/UiCheckbox.vue +3 -3
  146. package/vue/UiCombobox.vue +11 -8
  147. package/vue/UiContextMenu.vue +2 -2
  148. package/vue/UiDescriptionList.vue +1 -1
  149. package/vue/UiDialog.vue +4 -3
  150. package/vue/UiDisclosure.d.ts +13 -2
  151. package/vue/UiDisclosure.vue +61 -4
  152. package/vue/UiEditable.vue +2 -2
  153. package/vue/UiEditorInsertTableGrid.vue +5 -5
  154. package/vue/UiEditorMentionMenu.vue +2 -2
  155. package/vue/UiEditorSlashMenu.vue +6 -6
  156. package/vue/UiEditorSlashMenuItem.vue +1 -1
  157. package/vue/UiEditorTableContextMenu.vue +2 -2
  158. package/vue/UiEditorTableOverlay.vue +11 -11
  159. package/vue/UiEditorTableToolbar.vue +5 -5
  160. package/vue/UiEditorToolbar.vue +6 -4
  161. package/vue/UiFloatingActionButton.vue +2 -2
  162. package/vue/UiIcon.vue +31 -0
  163. package/vue/UiIconButton.vue +1 -1
  164. package/vue/UiInput.vue +8 -4
  165. package/vue/UiInputGroup.d.ts +9 -0
  166. package/vue/UiInputGroup.vue +39 -8
  167. package/vue/UiList.vue +1 -1
  168. package/vue/UiListItem.vue +20 -4
  169. package/vue/UiListbox.vue +3 -3
  170. package/vue/UiMenu.vue +3 -2
  171. package/vue/UiMenuItem.vue +4 -4
  172. package/vue/UiMeter.vue +1 -1
  173. package/vue/UiNavItem.d.ts +18 -0
  174. package/vue/UiNavItem.vue +96 -12
  175. package/vue/UiPopover.d.ts +9 -0
  176. package/vue/UiPopover.vue +45 -3
  177. package/vue/UiRadio.vue +2 -2
  178. package/vue/UiScrollArea.d.ts +9 -0
  179. package/vue/UiScrollArea.vue +35 -2
  180. package/vue/UiSearchResultRow.d.ts +9 -0
  181. package/vue/UiSearchResultRow.vue +51 -6
  182. package/vue/UiSearchShell.vue +4 -4
  183. package/vue/UiSection.vue +3 -3
  184. package/vue/UiSelect.vue +3 -2
  185. package/vue/UiSeparator.vue +4 -2
  186. package/vue/UiSidebar.vue +5 -3
  187. package/vue/UiStack.d.ts +3 -3
  188. package/vue/UiStack.vue +10 -4
  189. package/vue/UiStatusMessage.vue +1 -1
  190. package/vue/UiSwitch.vue +3 -3
  191. package/vue/UiTable.vue +3 -3
  192. package/vue/UiTabs.vue +8 -7
  193. package/vue/UiText.d.ts +18 -0
  194. package/vue/UiText.vue +70 -0
  195. package/vue/UiTextarea.vue +2 -2
  196. package/vue/UiToast.vue +4 -2
  197. package/vue/UiToastRegion.vue +5 -5
  198. package/vue/UiTooltip.vue +19 -15
  199. package/vue/UiTopBar.vue +1 -1
  200. package/vue/UiTreeItem.vue +31 -8
  201. package/vue/chunks/UiAvatar.js +1 -1
  202. package/vue/chunks/UiAvatarGroup.js +1 -1
  203. package/vue/chunks/UiBadge.js +1 -1
  204. package/vue/chunks/UiButton.js +1 -1
  205. package/vue/chunks/UiCallout.js +1 -1
  206. package/vue/chunks/UiCard.js +39 -3
  207. package/vue/chunks/UiCheckbox.js +1 -1
  208. package/vue/chunks/UiCombobox.js +1 -1
  209. package/vue/chunks/UiContextMenu.js +1 -1
  210. package/vue/chunks/UiDescriptionList.js +1 -1
  211. package/vue/chunks/UiDialog.js +1 -1
  212. package/vue/chunks/UiDisclosure.js +27 -4
  213. package/vue/chunks/UiEditable.js +1 -1
  214. package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
  215. package/vue/chunks/UiEditorMentionMenu.js +1 -1
  216. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  217. package/vue/chunks/UiEditorSlashMenuItem.js +1 -1
  218. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  219. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  220. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  221. package/vue/chunks/UiEditorToolbar.js +1 -1
  222. package/vue/chunks/UiFloatingActionButton.js +1 -1
  223. package/vue/chunks/UiIcon.js +92 -1
  224. package/vue/chunks/UiIconButton.js +1 -1
  225. package/vue/chunks/UiInput.js +1 -1
  226. package/vue/chunks/UiInputGroup.js +59 -22
  227. package/vue/chunks/UiList.js +1 -1
  228. package/vue/chunks/UiListItem.js +1 -1
  229. package/vue/chunks/UiListbox.js +1 -1
  230. package/vue/chunks/UiMenu.js +1 -1
  231. package/vue/chunks/UiMenuItem.js +1 -1
  232. package/vue/chunks/UiMeter.js +1 -1
  233. package/vue/chunks/UiNavItem.js +65 -6
  234. package/vue/chunks/UiPopover.js +37 -5
  235. package/vue/chunks/UiRadio.js +1 -1
  236. package/vue/chunks/UiScrollArea.js +66 -23
  237. package/vue/chunks/UiSearchResultRow.js +28 -2
  238. package/vue/chunks/UiSearchShell.js +1 -1
  239. package/vue/chunks/UiSection.js +1 -1
  240. package/vue/chunks/UiSelect.js +1 -1
  241. package/vue/chunks/UiSeparator.js +1 -1
  242. package/vue/chunks/UiSidebar.js +1 -1
  243. package/vue/chunks/UiStack.js +3 -2
  244. package/vue/chunks/UiStatusMessage.js +1 -1
  245. package/vue/chunks/UiSwitch.js +1 -1
  246. package/vue/chunks/UiTable.js +1 -1
  247. package/vue/chunks/UiTabs.js +1 -1
  248. package/vue/chunks/UiText.js +92 -4
  249. package/vue/chunks/UiTextarea.js +1 -1
  250. package/vue/chunks/UiToast.js +1 -1
  251. package/vue/chunks/UiToastRegion.js +1 -1
  252. package/vue/chunks/UiTooltip.js +1 -1
  253. package/vue/chunks/UiTopBar.js +1 -1
  254. package/vue/chunks/UiTreeItem.js +1 -1
  255. package/vue/components.css +1431 -1429
  256. package/vue/editor/LoomaEditor.d.ts +11 -0
  257. package/vue/editor/index.js +261 -145
@@ -45,14 +45,23 @@
45
45
  align-items: flex-start;
46
46
  gap: var(--ui-search-result-row-gap, var(--ui-space-3));
47
47
  background: var(--ui-search-result-row-surface, transparent);
48
- border: 1px solid var(--ui-search-result-row-border, transparent);
49
- border-radius: var(--ui-radius-md);
48
+ border: var(--ui-border-width) solid var(--ui-search-result-row-border, transparent);
49
+ border-radius: var(--ui-selection-radius);
50
50
  color: inherit;
51
51
  cursor: pointer;
52
52
  text-align: left;
53
53
  transition: background-color var(--ui-motion-fast) var(--ui-motion-ease);
54
54
  }
55
55
 
56
+ :scope[data-ui-search-result-row-state~="density=compact"] {
57
+ min-block-size: var(--ui-search-result-row-min-height, 3.125rem);
58
+ padding-block: var(--ui-search-result-row-padding-block, var(--ui-space-1));
59
+ padding-inline: var(--ui-search-result-row-padding-inline, var(--ui-space-2));
60
+ gap: var(--ui-search-result-row-gap, var(--ui-space-2));
61
+ align-items: center;
62
+ font-family: var(--ui-font-family-sans, sans-serif);
63
+ }
64
+
56
65
  :scope:hover:enabled {
57
66
  background: var(--ui-search-result-row-hover-surface, color-mix(in srgb, var(--ui-surface) 85%, black 3%));
58
67
  }
@@ -60,13 +69,14 @@
60
69
  :scope[data-ui-search-result-row-state~="selected"] {
61
70
  background: var(
62
71
  --ui-search-result-row-selected-bg,
63
- var(--ui-search-result-row-hover-surface, color-mix(in srgb, var(--ui-surface) 85%, black 3%))
72
+ var(--ui-selection-surface)
64
73
  );
74
+ color: var(--ui-selection-text);
65
75
  }
66
76
 
67
77
  :scope:focus-visible {
68
- outline: 2px solid var(--ui-focus-ring);
69
- outline-offset: -2px;
78
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
79
+ outline-offset: calc(-1 * var(--ui-focus-width));
70
80
  }
71
81
 
72
82
  :scope:disabled {
@@ -104,6 +114,13 @@
104
114
  display: none;
105
115
  }
106
116
 
117
+ @media (forced-colors: active) {
118
+ :scope[data-ui-search-result-row-state~="selected"]:not(:focus-visible):not(:disabled) {
119
+ outline: var(--ui-border-width) solid Highlight;
120
+ outline-offset: calc(-1 * var(--ui-border-width));
121
+ }
122
+ }
123
+
107
124
  /* A component that sets its display still honours the hidden attribute on its root. */
108
125
  :scope[hidden] {
109
126
  display: none;
@@ -121,5 +138,8 @@
121
138
  margin: 0;
122
139
  }
123
140
 
141
+ @media (forced-colors: active) {
142
+ }
143
+
124
144
  /* A component that sets its display still honours the hidden attribute on its root. */
125
145
  }
@@ -97,7 +97,7 @@
97
97
  margin-inline: auto;
98
98
  overflow: hidden;
99
99
  background: var(--_ui-search-shell-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
100
- border: 1px solid var(--_ui-search-shell-border, var(--ui-overlay-border, var(--ui-border-strong)));
100
+ border: var(--ui-border-width) solid var(--_ui-search-shell-border, var(--ui-overlay-border, var(--ui-border-strong)));
101
101
  border-radius: var(--_ui-search-shell-radius, var(--ui-overlay-radius, var(--ui-radius-dialog)));
102
102
  box-shadow: var(--_ui-search-shell-shadow, var(--ui-overlay-shadow, var(--ui-elevation-dialog, var(--ui-shadow-xl))));
103
103
  }
@@ -184,7 +184,7 @@
184
184
  inline-size: 100%;
185
185
  min-block-size: var(--ui-control-min-block-size);
186
186
  padding: var(--ui-space-2) var(--ui-space-3);
187
- border: 1px solid var(--ui-control-border);
187
+ border: var(--ui-border-width) solid var(--ui-control-border);
188
188
  border-radius: var(--ui-field-radius, var(--ui-radius-md));
189
189
  background: var(--ui-control-surface);
190
190
  color: var(--ui-text-primary);
@@ -194,8 +194,8 @@
194
194
 
195
195
  :where([data-slotted], [data-slotted] *):is(input[slot="search"]:focus-visible) {
196
196
  border-color: var(--_ui-search-shell-focus-color, var(--ui-control-focus));
197
- outline: 2px solid var(--ui-focus-ring);
198
- outline-offset: 2px;
197
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
198
+ outline-offset: var(--ui-focus-width);
199
199
  }
200
200
 
201
201
  /* Laid out like the dialog's action row: actions right-aligned, spaced as buttons, no fill. */
@@ -11,19 +11,19 @@
11
11
 
12
12
  :scope[data-ui-section-state~="variant=card"] {
13
13
  padding: var(--ui-space-5);
14
- border: 1px solid var(--ui-border-strong);
14
+ border: var(--ui-border-width) solid var(--ui-border-strong);
15
15
  border-radius: var(--ui-radius-lg);
16
16
  background: var(--ui-surface-raised);
17
17
  }
18
18
 
19
19
  :scope[data-ui-section-state~="variant=divided"] {
20
20
  padding-block-start: var(--ui-space-6);
21
- border-block-start: 1px solid var(--ui-border-divider);
21
+ border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
22
22
  }
23
23
 
24
24
  :scope[data-ui-section-state~="variant=card"][data-ui-section-state~="tone=danger"] {
25
25
  border-color: color-mix(in srgb, var(--ui-danger) 45%, var(--ui-border-default));
26
- border-inline-start: 4px solid var(--ui-danger);
26
+ border-inline-start: var(--ui-accent-line-width) solid var(--ui-danger);
27
27
  background: var(--ui-danger-soft);
28
28
  }
29
29
 
@@ -50,7 +50,7 @@
50
50
  min-block-size: var(--ui-control-size-md);
51
51
  margin: 0;
52
52
  padding: var(--ui-space-2) var(--ui-space-3);
53
- border: 1px solid var(--ui-select-border, var(--ui-control-border, var(--ui-border-strong)));
53
+ border: var(--ui-border-width) solid var(--ui-select-border, var(--ui-control-border, var(--ui-border-strong)));
54
54
  border-radius: var(--ui-select-radius, var(--ui-field-radius, var(--ui-radius-md)));
55
55
  background-color: var(--ui-select-surface, var(--ui-control-surface, var(--ui-surface-elevated)));
56
56
  color: var(--ui-text-primary);
@@ -98,7 +98,11 @@
98
98
  box-shadow: var(
99
99
  --ui-select-invalid-focus-shadow,
100
100
  var(--ui-control-inset),
101
- 0 0 0 3px color-mix(in srgb, var(--ui-select-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%, transparent)
101
+ 0 0 0 calc(var(--ui-focus-width) * 1.5) color-mix(
102
+ in srgb,
103
+ var(--ui-select-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%,
104
+ transparent
105
+ )
102
106
  );
103
107
  }
104
108
 
@@ -12,13 +12,13 @@
12
12
  align-self: stretch;
13
13
  margin: 0;
14
14
  border: 0;
15
- border-block-start: 1px solid var(--ui-separator-color, var(--ui-border-divider));
15
+ border-block-start: var(--ui-border-width) solid var(--ui-separator-color, var(--ui-border-divider));
16
16
  }
17
17
 
18
18
  :scope[aria-orientation="vertical"] {
19
19
  block-size: auto;
20
20
  border-block-start: 0;
21
- border-inline-start: 1px solid var(--ui-separator-color, var(--ui-border-divider));
21
+ border-inline-start: var(--ui-border-width) solid var(--ui-separator-color, var(--ui-border-divider));
22
22
  }
23
23
  }
24
24
  @scope ([data-component~="ui-separator"]) to ([data-component]) {
@@ -31,12 +31,12 @@
31
31
  max-inline-size: 100%;
32
32
  min-block-size: 0;
33
33
  background: var(--ui-sidebar-surface, var(--ui-surface-default));
34
- border-inline-end: 1px solid var(--ui-sidebar-border, var(--ui-border-divider));
34
+ border-inline-end: var(--ui-border-width) solid var(--ui-sidebar-border, var(--ui-border-divider));
35
35
  }
36
36
 
37
37
  :scope[data-ui-sidebar-state~="side=end"] {
38
38
  border-inline-end: 0;
39
- border-inline-start: 1px solid var(--ui-sidebar-border, var(--ui-border-divider));
39
+ border-inline-start: var(--ui-border-width) solid var(--ui-sidebar-border, var(--ui-border-divider));
40
40
  }
41
41
 
42
42
  /* The panel's content scrolls, and each edge that hides content fades: the scroll fade every
@@ -111,7 +111,7 @@
111
111
  inset-inline-start: 50%;
112
112
  inline-size: 6px;
113
113
  block-size: 22px;
114
- border: 1px solid var(--ui-border-strong);
114
+ border: var(--ui-border-width) solid var(--ui-border-strong);
115
115
  border-radius: var(--ui-radius-round);
116
116
  background: var(--ui-surface-elevated);
117
117
  opacity: 0;
@@ -17,6 +17,9 @@
17
17
  margin: 0;
18
18
  }
19
19
 
20
+ :scope[data-ui-stack-state~="gap=none"] {
21
+ --_layout-gap: 0px;
22
+ }
20
23
  :scope[data-ui-stack-state~="gap=xs"] {
21
24
  --_layout-gap: var(--ui-space-2);
22
25
  }
@@ -19,7 +19,7 @@
19
19
 
20
20
  :scope[data-ui-status-message-state~="layout=panel"] {
21
21
  padding: var(--ui-space-6);
22
- border: 1px dashed var(--ui-border-strong);
22
+ border: var(--ui-border-width) dashed var(--ui-border-strong);
23
23
  border-radius: var(--ui-radius-lg);
24
24
  }
25
25
 
@@ -58,7 +58,7 @@
58
58
  width: var(--_ui-switch-track-width, 2.5rem);
59
59
  height: var(--_ui-switch-track-height, 1.5rem);
60
60
  padding: 0;
61
- border: 1px solid var(--ui-control-border, var(--ui-border-strong));
61
+ border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
62
62
  border-radius: var(--ui-radius-round);
63
63
  background-color: var(--ui-control-surface, var(--ui-surface-default));
64
64
  box-shadow: var(--ui-control-inset);
@@ -91,8 +91,8 @@
91
91
  }
92
92
 
93
93
  input:focus-visible {
94
- outline: 2px solid var(--ui-focus-ring, var(--ui-accent-solid));
95
- outline-offset: 2px;
94
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring, var(--ui-accent-solid));
95
+ outline-offset: var(--ui-focus-width);
96
96
  }
97
97
 
98
98
  :scope[data-ui-switch-state~="disabled"] {
@@ -41,8 +41,8 @@
41
41
  }
42
42
 
43
43
  :scope:focus-visible {
44
- outline: 2px solid var(--ui-focus-ring);
45
- outline-offset: -2px;
44
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
45
+ outline-offset: calc(-1 * var(--ui-focus-width));
46
46
  }
47
47
 
48
48
  :scope[data-ui-table-state~="density=compact"] {
@@ -92,7 +92,7 @@
92
92
  :where([data-slotted], [data-slotted] *):is(td) {
93
93
  block-size: var(--_row-size);
94
94
  padding: var(--_pad-block) var(--_pad-inline);
95
- border-block-end: 1px solid var(--ui-border-subtle);
95
+ border-block-end: var(--ui-border-width) solid var(--ui-border-subtle);
96
96
  text-align: start;
97
97
  vertical-align: middle;
98
98
  }
@@ -52,7 +52,7 @@
52
52
  overflow-y: hidden;
53
53
  overscroll-behavior: contain;
54
54
  scrollbar-width: thin;
55
- border-block-end: 1px solid var(--ui-border-divider);
55
+ border-block-end: var(--ui-border-width) solid var(--ui-border-divider);
56
56
  }
57
57
 
58
58
  /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
@@ -78,7 +78,7 @@
78
78
  grid-auto-flow: row;
79
79
  grid-auto-columns: auto;
80
80
  border-block-end: 0;
81
- border-inline-end: 1px solid var(--ui-border-divider);
81
+ border-inline-end: var(--ui-border-width) solid var(--ui-border-divider);
82
82
  }
83
83
 
84
84
  @media (prefers-reduced-motion: reduce) {
@@ -97,10 +97,10 @@
97
97
  .list button,
98
98
  .list > :where([data-slotted], [data-slotted] *):is(button[slot="tab"]) {
99
99
  min-block-size: var(--_ui-tabs-tab-min-block-size, var(--_tab-min-block-size));
100
- margin: 0 0 -1px;
100
+ margin: 0 0 calc(-1 * var(--ui-border-width));
101
101
  padding: var(--_ui-tabs-tab-padding-block, var(--_tab-padding-block)) var(--_ui-tabs-tab-padding-inline, var(--_tab-padding-inline));
102
102
  border: 0;
103
- border-block-end: 2px solid transparent;
103
+ border-block-end: var(--ui-accent-line-width) solid transparent;
104
104
  background: transparent;
105
105
  color: var(--ui-text-secondary);
106
106
  font: inherit;
@@ -146,7 +146,7 @@
146
146
  .list > :where([data-slotted], [data-slotted] *):is(button[slot="tab"]:focus-visible) {
147
147
  position: relative;
148
148
  outline: none;
149
- box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
149
+ box-shadow: inset 0 0 0 var(--ui-focus-width) color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
150
150
  border-radius: var(--ui-radius-sm);
151
151
  }
152
152
  .panels > :where([data-slotted], [data-slotted] *):is(*) {
@@ -155,9 +155,9 @@
155
155
 
156
156
  :scope[data-ui-tabs-state~="orientation=vertical"] .list button,
157
157
  :scope[data-ui-tabs-state~="orientation=vertical"] .list > :where([data-slotted], [data-slotted] *):is(button[slot="tab"]) {
158
- margin: 0 -1px 0 0;
158
+ margin: 0 calc(-1 * var(--ui-border-width)) 0 0;
159
159
  border-block-end: 0;
160
- border-inline-end: 2px solid transparent;
160
+ border-inline-end: var(--ui-accent-line-width) solid transparent;
161
161
  text-align: start;
162
162
  }
163
163
 
@@ -91,6 +91,14 @@
91
91
  text-align: center;
92
92
  }
93
93
 
94
+ :scope[data-ui-text-state~="font=sans"] {
95
+ font-family: var(--ui-font-family-sans, sans-serif);
96
+ }
97
+
98
+ :scope[data-ui-text-state~="wrap=anywhere"] {
99
+ overflow-wrap: anywhere;
100
+ }
101
+
94
102
  /* A component that sets its display still honours the hidden attribute on its root. */
95
103
  :scope[hidden] {
96
104
  display: none;
@@ -33,7 +33,7 @@
33
33
  padding: var(--ui-space-2) var(--ui-space-3);
34
34
  appearance: none;
35
35
  resize: vertical;
36
- border: 1px solid var(--ui-control-border, var(--ui-border-strong));
36
+ border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
37
37
  border-radius: var(--ui-textarea-radius, var(--ui-field-radius, var(--ui-radius-md)));
38
38
  background: var(--ui-control-surface, var(--ui-surface-elevated));
39
39
  color: var(--ui-text-primary);
@@ -77,7 +77,11 @@
77
77
  box-shadow: var(
78
78
  --ui-textarea-invalid-focus-shadow,
79
79
  var(--ui-control-inset),
80
- 0 0 0 3px color-mix(in srgb, var(--ui-textarea-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%, transparent)
80
+ 0 0 0 calc(var(--ui-focus-width) * 1.5) color-mix(
81
+ in srgb,
82
+ var(--ui-textarea-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%,
83
+ transparent
84
+ )
81
85
  );
82
86
  }
83
87
 
@@ -129,7 +129,7 @@
129
129
  grid-template-columns: 1fr auto;
130
130
  gap: var(--ui-space-2);
131
131
  align-items: start;
132
- border: 1px solid var(--_ui-toast-region-border, var(--ui-overlay-border, var(--ui-border-strong)));
132
+ border: var(--ui-border-width) solid var(--_ui-toast-region-border, var(--ui-overlay-border, var(--ui-border-strong)));
133
133
  border-radius: var(--_ui-toast-region-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
134
134
  padding: var(--ui-space-3) var(--ui-space-4);
135
135
  background: var(--_ui-toast-region-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
@@ -139,16 +139,16 @@
139
139
  }
140
140
 
141
141
  .toast[data-tone="info"] {
142
- border-inline-start: 3px solid var(--ui-info-solid);
142
+ border-inline-start: var(--ui-accent-line-width) solid var(--ui-info-solid);
143
143
  }
144
144
  .toast[data-tone="success"] {
145
- border-inline-start: 3px solid var(--ui-success-solid);
145
+ border-inline-start: var(--ui-accent-line-width) solid var(--ui-success-solid);
146
146
  }
147
147
  .toast[data-tone="warning"] {
148
- border-inline-start: 3px solid var(--ui-warning-solid);
148
+ border-inline-start: var(--ui-accent-line-width) solid var(--ui-warning-solid);
149
149
  }
150
150
  .toast[data-tone="danger"] {
151
- border-inline-start: 3px solid var(--ui-danger-solid);
151
+ border-inline-start: var(--ui-accent-line-width) solid var(--ui-danger-solid);
152
152
  }
153
153
 
154
154
  /* Leaving slides on down and fades; the controller removes the toast when this ends. */
@@ -32,8 +32,8 @@
32
32
  inline-size: 100%;
33
33
  margin: 0;
34
34
  padding: var(--ui-space-3) var(--ui-space-4);
35
- border: 1px solid var(--ui-toast-border, var(--ui-overlay-border, var(--ui-border-strong)));
36
- border-inline-start: 3px solid var(--ui-toast-accent, var(--_ui-toast-accent));
35
+ border: var(--ui-border-width) solid var(--ui-toast-border, var(--ui-overlay-border, var(--ui-border-strong)));
36
+ border-inline-start: var(--ui-accent-line-width) solid var(--ui-toast-accent, var(--_ui-toast-accent));
37
37
  border-radius: var(--ui-toast-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
38
38
  background: var(--ui-toast-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
39
39
  color: var(--ui-text-primary);
@@ -80,7 +80,7 @@
80
80
  position: relative;
81
81
  box-sizing: border-box;
82
82
  max-inline-size: var(--_ui-tooltip-max-inline-size, 18rem);
83
- border: 1px solid var(--_tooltip-line);
83
+ border: var(--ui-border-width) solid var(--_tooltip-line);
84
84
  border-radius: var(--_ui-tooltip-radius, var(--ui-overlay-radius, var(--ui-radius-md)));
85
85
  background: var(--_ui-tooltip-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
86
86
  color: var(--_ui-tooltip-text, var(--ui-text-primary));
@@ -125,27 +125,27 @@
125
125
  position: absolute;
126
126
  z-index: 1;
127
127
  inset-inline-start: var(--ui-space-3);
128
- inset-block-end: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - 0.5px);
128
+ inset-block-end: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - var(--ui-border-width) / 2);
129
129
  inline-size: var(--_ui-tooltip-arrow-size, 0.625rem);
130
130
  block-size: var(--_ui-tooltip-arrow-size, 0.625rem);
131
131
  box-sizing: border-box;
132
132
  background: inherit;
133
133
  border: 0 solid var(--_tooltip-line);
134
- border-inline-end-width: 1px;
135
- border-block-end-width: 1px;
136
- border-end-end-radius: 1px;
134
+ border-inline-end-width: var(--ui-border-width);
135
+ border-block-end-width: var(--ui-border-width);
136
+ border-end-end-radius: var(--ui-border-width);
137
137
  transform: rotate(45deg) scaleX(1.25) scaleY(0.85);
138
138
  }
139
139
 
140
140
  :scope[data-ui-actual-placement="bottom"] .surface::after {
141
- inset-block-start: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - 0.5px);
141
+ inset-block-start: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - var(--ui-border-width) / 2);
142
142
  inset-block-end: auto;
143
143
  border-inline-end-width: 0;
144
144
  border-block-end-width: 0;
145
- border-inline-start-width: 1px;
146
- border-block-start-width: 1px;
145
+ border-inline-start-width: var(--ui-border-width);
146
+ border-block-start-width: var(--ui-border-width);
147
147
  border-end-end-radius: 0;
148
- border-start-start-radius: 1px;
148
+ border-start-start-radius: var(--ui-border-width);
149
149
  }
150
150
 
151
151
  :scope[data-ui-actual-align="center"] .surface::after {
@@ -166,16 +166,16 @@
166
166
 
167
167
  :scope[data-ui-actual-placement="left"] .surface::after {
168
168
  inset-inline-start: auto;
169
- inset-inline-end: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - 0.5px);
170
- border-inline-end-width: 1px;
171
- border-block-start-width: 1px;
169
+ inset-inline-end: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - var(--ui-border-width) / 2);
170
+ border-inline-end-width: var(--ui-border-width);
171
+ border-block-start-width: var(--ui-border-width);
172
172
  }
173
173
 
174
174
  :scope[data-ui-actual-placement="right"] .surface::after {
175
- inset-inline-start: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - 0.5px);
175
+ inset-inline-start: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - var(--ui-border-width) / 2);
176
176
  inset-inline-end: auto;
177
- border-inline-start-width: 1px;
178
- border-block-end-width: 1px;
177
+ border-inline-start-width: var(--ui-border-width);
178
+ border-block-end-width: var(--ui-border-width);
179
179
  }
180
180
 
181
181
  :scope[data-ui-actual-placement="left"][data-ui-actual-align="start"] .surface::after,
@@ -45,7 +45,7 @@
45
45
  padding-inline-start: max(var(--ui-top-bar-padding-inline, var(--ui-space-4)), env(safe-area-inset-left));
46
46
  padding-inline-end: max(var(--ui-top-bar-padding-inline, var(--ui-space-4)), env(safe-area-inset-right));
47
47
  background: var(--ui-top-bar-surface, var(--ui-surface-elevated));
48
- border-block-end: 1px solid var(--ui-top-bar-border, var(--ui-border-divider));
48
+ border-block-end: var(--ui-border-width) solid var(--ui-top-bar-border, var(--ui-border-divider));
49
49
  }
50
50
 
51
51
  .leading,
@@ -56,7 +56,7 @@
56
56
  min-block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
57
57
  min-inline-size: 0;
58
58
  font-size: var(--_ui-tree-item-font-size, var(--ui-font-size-sm));
59
- border-radius: var(--ui-radius-md);
59
+ border-radius: var(--ui-selection-radius);
60
60
  color: var(--ui-text-secondary);
61
61
  transition:
62
62
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
@@ -67,12 +67,20 @@
67
67
  }
68
68
 
69
69
  .row:hover,
70
- :scope[data-ui-tree-item-state~="selected"] .row,
71
70
  .row:focus-within {
72
71
  color: var(--ui-text-primary);
73
72
  background: var(--ui-surface-muted);
74
73
  }
75
74
 
75
+ /* Selection is the same surface recipe as destination and choice rows. */
76
+ :scope[data-ui-tree-item-state~="selected"] > .row {
77
+ color: var(--ui-selection-text);
78
+ background: var(--ui-selection-surface);
79
+ }
80
+ :scope[data-ui-tree-item-state~="selected"]:not([aria-disabled="true"]) > .row > .leading {
81
+ color: var(--ui-selection-text);
82
+ }
83
+
76
84
  :scope[data-ui-tree-item-state~="disabled"] .row {
77
85
  color: var(--ui-disabled-text);
78
86
  background: var(--ui-disabled-surface);
@@ -87,13 +95,13 @@
87
95
  }
88
96
 
89
97
  :scope:focus-visible .row {
90
- box-shadow: 0 0 0 2px var(--ui-focus-ring);
98
+ box-shadow: 0 0 0 var(--ui-focus-width) var(--ui-focus-ring);
91
99
  }
92
100
 
93
101
  /* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
94
102
  :scope[data-drop-position="inside"] > .row {
95
103
  background: var(--ui-accent-subtle);
96
- box-shadow: inset 0 0 0 1px var(--_ui-tree-drop-color, var(--ui-accent-solid));
104
+ box-shadow: inset 0 0 0 var(--ui-accent-line-width) var(--_ui-tree-drop-color, var(--ui-accent-solid));
97
105
  }
98
106
 
99
107
  .disclosure,
@@ -389,7 +397,7 @@
389
397
  z-index: 3;
390
398
  inset-inline: 1px;
391
399
  display: none;
392
- block-size: 2px;
400
+ block-size: var(--ui-accent-line-width);
393
401
  border-radius: var(--ui-radius-round);
394
402
  background: var(--_ui-tree-drop-color, var(--ui-accent-solid));
395
403
  pointer-events: none;
@@ -402,7 +410,7 @@
402
410
  inset-block-start: 50%;
403
411
  inline-size: 7px;
404
412
  block-size: 7px;
405
- border: 2px solid var(--_ui-tree-drop-color, var(--ui-accent-solid));
413
+ border: var(--ui-accent-line-width) solid var(--_ui-tree-drop-color, var(--ui-accent-solid));
406
414
  border-radius: var(--ui-radius-round);
407
415
  background: var(--ui-surface-elevated);
408
416
  transform: translateY(-50%);
@@ -417,12 +425,12 @@
417
425
 
418
426
  :scope[data-drop-position="before"] > .row > .row-drop-indicator {
419
427
  display: block;
420
- inset-block-start: -1px;
428
+ inset-block-start: calc(-0.5 * var(--ui-accent-line-width));
421
429
  }
422
430
 
423
431
  :scope[data-drop-position="after"] > .subtree-drop-indicator {
424
432
  display: block;
425
- inset-block-end: -1px;
433
+ inset-block-end: calc(-0.5 * var(--ui-accent-line-width));
426
434
  }
427
435
 
428
436
  .children[hidden] {
@@ -484,6 +492,17 @@
484
492
  }
485
493
  }
486
494
 
495
+ @media (forced-colors: active) {
496
+ :scope:focus-visible > .row {
497
+ outline: var(--ui-focus-width) solid Highlight;
498
+ outline-offset: calc(-1 * var(--ui-focus-width));
499
+ }
500
+ :scope[data-ui-tree-item-state~="selected"]:not(:focus-visible):not([aria-disabled="true"]) > .row {
501
+ outline: var(--ui-border-width) solid Highlight;
502
+ outline-offset: calc(-1 * var(--ui-border-width));
503
+ }
504
+ }
505
+
487
506
  /* A component that sets its display still honours the hidden attribute on its root. */
488
507
  :scope[hidden] {
489
508
  display: none;
@@ -492,6 +511,8 @@
492
511
  @scope ([data-component~="ui-tree-item"]) to ([data-component]) {
493
512
  /* This component's hooks style the element they are set on, and never a nested one. */
494
513
 
514
+ /* Selection is the same surface recipe as destination and choice rows. */
515
+
495
516
  /* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
496
517
 
497
518
  /* Lucide grip-vertical, filling the handle as in Looma 0.2. */
@@ -552,5 +573,8 @@
552
573
  @media (prefers-reduced-motion: reduce) {
553
574
  }
554
575
 
576
+ @media (forced-colors: active) {
577
+ }
578
+
555
579
  /* A component that sets its display still honours the hidden attribute on its root. */
556
580
  }