@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
@@ -6,7 +6,7 @@
6
6
 
7
7
  :scope {
8
8
  background: var(--ui-surface);
9
- border: 1px solid var(--ui-border-strong);
9
+ border: var(--ui-border-width) solid var(--ui-border-strong);
10
10
  border-radius: var(--ui-radius-dialog);
11
11
  box-shadow: var(--ui-shadow-lg, 0 8px 24px rgb(0 0 0 / 0.12));
12
12
  overflow: hidden;
@@ -26,7 +26,7 @@
26
26
  align-items: center;
27
27
  gap: var(--ui-space-2);
28
28
  padding: var(--ui-space-3) var(--ui-space-4);
29
- border-bottom: 1px solid var(--ui-border-divider);
29
+ border-bottom: var(--ui-border-width) solid var(--ui-border-divider);
30
30
  font-size: var(--ui-font-size-xs);
31
31
  color: var(--ui-text-muted);
32
32
  font-weight: var(--ui-font-semibold);
@@ -104,7 +104,7 @@
104
104
  width: 32px;
105
105
  height: 32px;
106
106
  background: var(--ui-surface-hover);
107
- border: 1px solid var(--ui-border);
107
+ border: var(--ui-border-width) solid var(--ui-border);
108
108
  border-radius: var(--ui-radius-md);
109
109
  font-size: var(--ui-font-size-sm);
110
110
  font-weight: var(--ui-font-bold);
@@ -151,7 +151,7 @@
151
151
 
152
152
  .footer {
153
153
  padding: var(--ui-space-2) var(--ui-space-3);
154
- border-top: 1px solid var(--ui-border-divider);
154
+ border-top: var(--ui-border-width) solid var(--ui-border-divider);
155
155
  font-size: var(--ui-font-size-xs);
156
156
  color: var(--ui-text-muted);
157
157
  }
@@ -163,8 +163,8 @@
163
163
  font-family: var(--ui-font-family-mono, ui-monospace, monospace);
164
164
  font-size: var(--ui-font-size-2xs);
165
165
  background: var(--ui-surface-hover);
166
- border: 1px solid var(--ui-border);
167
- border-radius: 3px;
166
+ border: var(--ui-border-width) solid var(--ui-border);
167
+ border-radius: var(--ui-radius-sm);
168
168
  padding: 0 3px;
169
169
  color: var(--ui-text-secondary);
170
170
  }
@@ -8,7 +8,7 @@
8
8
  max-height: min(28rem, calc(100vh - 24px));
9
9
  padding: var(--ui-space-2);
10
10
  background: var(--ui-surface);
11
- border: 1px solid var(--ui-border-strong);
11
+ border: var(--ui-border-width) solid var(--ui-border-strong);
12
12
  border-radius: var(--ui-radius-lg);
13
13
  box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
14
14
  display: flex;
@@ -75,7 +75,7 @@
75
75
  width: 1rem;
76
76
  height: 1rem;
77
77
  border-radius: var(--ui-radius-round);
78
- border: 1px solid var(--ui-border);
78
+ border: var(--ui-border-width) solid var(--ui-border);
79
79
  background: var(--_swatch, #fff);
80
80
  box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.35);
81
81
  flex-shrink: 0;
@@ -46,7 +46,7 @@
46
46
  width: 24px;
47
47
  height: 24px;
48
48
  padding: 0;
49
- border: 1px solid var(--ui-affordance-near-color, var(--ui-border-strong));
49
+ border: var(--ui-border-width) solid var(--ui-affordance-near-color, var(--ui-border-strong));
50
50
  border-radius: var(--ui-radius-round);
51
51
  background: color-mix(in srgb, var(--ui-surface-elevated) 96%, transparent);
52
52
  color: var(--ui-affordance-near-color, var(--ui-text-secondary));
@@ -89,8 +89,8 @@
89
89
  .handle:focus-visible,
90
90
  .selector:focus-visible,
91
91
  .cell-menu:focus-visible {
92
- outline: 2px solid var(--ui-focus-ring);
93
- outline-offset: 2px;
92
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
93
+ outline-offset: var(--ui-focus-width);
94
94
  }
95
95
 
96
96
  .control.row {
@@ -123,13 +123,13 @@
123
123
  }
124
124
 
125
125
  .control.row .line {
126
- inset: -1px 0 auto;
127
- height: 2px;
126
+ inset: calc(-0.5 * var(--ui-accent-line-width)) 0 auto;
127
+ height: var(--ui-accent-line-width);
128
128
  }
129
129
 
130
130
  .control.col .line {
131
- inset: 0 auto 0 -1px;
132
- width: 2px;
131
+ inset: 0 auto 0 calc(-0.5 * var(--ui-accent-line-width));
132
+ width: var(--ui-accent-line-width);
133
133
  }
134
134
 
135
135
  .control.active .line {
@@ -201,7 +201,7 @@
201
201
  align-items: center;
202
202
  justify-content: center;
203
203
  padding: 0;
204
- border: 1px solid transparent;
204
+ border: var(--ui-border-width) solid transparent;
205
205
  background: transparent;
206
206
  color: var(--ui-text-secondary);
207
207
  box-shadow: none;
@@ -318,19 +318,19 @@
318
318
  position: absolute;
319
319
  z-index: 3;
320
320
  background: var(--ui-accent-solid);
321
- box-shadow: 0 0 0 2px var(--ui-surface);
321
+ box-shadow: 0 0 0 var(--ui-border-width) var(--ui-surface);
322
322
  pointer-events: none;
323
323
  }
324
324
 
325
325
  .drop-indicator.row {
326
326
  left: 0;
327
327
  width: 100%;
328
- height: 2px;
328
+ height: var(--ui-accent-line-width);
329
329
  }
330
330
 
331
331
  .drop-indicator.column {
332
332
  top: 0;
333
- width: 2px;
333
+ width: var(--ui-accent-line-width);
334
334
  height: 100%;
335
335
  }
336
336
 
@@ -35,8 +35,8 @@
35
35
  gap: var(--ui-space-1);
36
36
  padding: var(--ui-space-1);
37
37
  background: color-mix(in srgb, var(--ui-surface) 94%, transparent);
38
- border: 1px solid var(--ui-border-strong);
39
- border-radius: calc(var(--ui-radius-md) + 2px);
38
+ border: var(--ui-border-width) solid var(--ui-border-strong);
39
+ border-radius: calc(var(--ui-radius-md) + 2 * var(--ui-border-width));
40
40
  box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
41
41
  backdrop-filter: blur(10px);
42
42
  }
@@ -126,7 +126,7 @@
126
126
  max-width: min(17rem, calc(100vw - 24px));
127
127
  padding: var(--ui-space-1);
128
128
  background: var(--ui-surface);
129
- border: 1px solid var(--ui-border-strong);
129
+ border: var(--ui-border-width) solid var(--ui-border-strong);
130
130
  border-radius: var(--ui-radius-md);
131
131
  box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
132
132
  display: flex;
@@ -141,7 +141,7 @@
141
141
  .menu-section + .menu-section {
142
142
  margin-top: var(--ui-space-1);
143
143
  padding-top: var(--ui-space-1);
144
- border-top: 1px solid var(--ui-border-divider);
144
+ border-top: var(--ui-border-width) solid var(--ui-border-divider);
145
145
  }
146
146
 
147
147
  .menu-heading {
@@ -175,7 +175,7 @@
175
175
  width: 14px;
176
176
  height: 14px;
177
177
  flex: 0 0 14px;
178
- border: 1px solid color-mix(in srgb, var(--ui-border) 80%, #000);
178
+ border: var(--ui-border-width) solid color-mix(in srgb, var(--ui-border) 80%, #000);
179
179
  border-radius: var(--ui-radius-round);
180
180
  background: var(--_swatch);
181
181
  }
@@ -9,7 +9,7 @@
9
9
  padding: var(--ui-editor-toolbar-padding-block, 6px) var(--ui-editor-toolbar-padding-inline, 12px);
10
10
  min-height: var(--ui-editor-toolbar-min-height, 48px);
11
11
  background: var(--ui-editor-toolbar-surface, var(--ui-surface));
12
- border-bottom: 1px solid var(--ui-editor-toolbar-border, var(--ui-border-divider));
12
+ border-bottom: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-divider));
13
13
  }
14
14
 
15
15
  /* One row, always. When the controls outgrow the space, the row scrolls sideways rather than
@@ -64,7 +64,7 @@
64
64
  min-height: auto;
65
65
  padding: var(--ui-editor-toolbar-floating-padding, 4px);
66
66
  background: color-mix(in srgb, var(--ui-editor-toolbar-surface, var(--ui-surface)) 96%, transparent);
67
- border: 1px solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
67
+ border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
68
68
  border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
69
69
  box-shadow: var(--ui-editor-toolbar-floating-shadow, var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12)));
70
70
  backdrop-filter: blur(10px);
@@ -78,7 +78,7 @@
78
78
  left: 0;
79
79
  right: 0;
80
80
  min-height: var(--ui-editor-toolbar-mobile-min-height, 56px);
81
- border-top: 1px solid var(--ui-editor-toolbar-border, var(--ui-border-divider));
81
+ border-top: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-divider));
82
82
  border-bottom: none;
83
83
  box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
84
84
  }
@@ -87,7 +87,7 @@
87
87
  position: relative;
88
88
  inset: auto;
89
89
  min-height: auto;
90
- border: 1px solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
90
+ border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
91
91
  border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
92
92
  box-shadow: var(--ui-editor-toolbar-floating-shadow, var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12)));
93
93
  }
@@ -56,8 +56,8 @@
56
56
  }
57
57
 
58
58
  :scope:focus-visible {
59
- outline: 2px solid var(--ui-focus-ring);
60
- outline-offset: 2px;
59
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
60
+ outline-offset: var(--ui-focus-width);
61
61
  }
62
62
 
63
63
  :scope:disabled {
@@ -147,7 +147,7 @@
147
147
  min-block-size: var(--ui-icon-button-size, var(--_size));
148
148
  padding: 0;
149
149
  margin: 0;
150
- border: 1px solid transparent;
150
+ border: var(--ui-border-width) solid transparent;
151
151
  border-radius: var(--ui-icon-button-radius, var(--ui-action-radius, var(--ui-radius-md)));
152
152
  background-color: var(--ui-icon-button-surface, transparent);
153
153
  color: inherit;
@@ -43,7 +43,7 @@
43
43
  min-inline-size: 0;
44
44
  min-block-size: var(--ui-control-size-md);
45
45
  /* The frame reads the shared control tokens with a lone Input's fallbacks, so the two match. */
46
- border: 1px solid var(--ui-control-border, var(--ui-border-strong));
46
+ border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
47
47
  border-radius: var(--ui-input-group-radius, var(--ui-field-radius, var(--ui-radius-md)));
48
48
  background: var(--ui-control-surface, var(--ui-surface-elevated));
49
49
  box-shadow: var(--ui-control-inset);
@@ -89,15 +89,19 @@
89
89
  box-shadow: var(
90
90
  --ui-input-group-invalid-focus-shadow,
91
91
  var(--ui-control-inset),
92
- 0 0 0 3px color-mix(in srgb, var(--ui-input-group-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%, transparent)
92
+ 0 0 0 calc(var(--ui-focus-width) * 1.5) color-mix(
93
+ in srgb,
94
+ var(--ui-input-group-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%,
95
+ transparent
96
+ )
93
97
  );
94
98
  }
95
99
 
96
100
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
97
101
  @media (forced-colors: active) {
98
102
  :scope:has(input:focus-visible) {
99
- outline: 2px solid Highlight;
100
- outline-offset: 1px;
103
+ outline: var(--ui-focus-width) solid Highlight;
104
+ outline-offset: var(--ui-border-width);
101
105
  }
102
106
  }
103
107
 
@@ -132,11 +136,20 @@
132
136
  }
133
137
 
134
138
  .affix:has([slot="prefix"]) {
135
- border-inline-end: 1px solid var(--ui-border-divider);
139
+ border-inline-end: var(--ui-border-width) solid var(--ui-border-divider);
136
140
  }
137
141
 
138
142
  .affix:has([slot="suffix"]) {
139
- border-inline-start: 1px solid var(--ui-border-divider);
143
+ border-inline-start: var(--ui-border-width) solid var(--ui-border-divider);
144
+ }
145
+
146
+ :scope[data-ui-input-group-state~="prefixKind=icon"] {
147
+ --_ui-default-input-padding-inline-start: var(--ui-space-2);
148
+ }
149
+ :scope[data-ui-input-group-state~="prefixKind=icon"] .affix:first-child {
150
+ padding-inline-end: 0;
151
+ border-inline-end: 0;
152
+ background: transparent;
140
153
  }
141
154
 
142
155
  /* Centred rather than padded above and below: the group is exactly a lone Input's height, so a
@@ -64,7 +64,8 @@
64
64
  margin: 0;
65
65
  padding: var(--ui-space-2) var(--ui-space-3);
66
66
  appearance: none;
67
- border: var(--ui-input-border-width, var(--_ui-default-input-border-width, 1px)) solid
67
+ padding-inline-start: var(--_ui-default-input-padding-inline-start, var(--ui-space-3));
68
+ border: var(--ui-input-border-width, var(--_ui-default-input-border-width, var(--ui-border-width))) solid
68
69
  var(--ui-input-border, var(--_ui-default-input-border, var(--ui-control-border, var(--ui-border-strong))));
69
70
  border-radius: var(--ui-input-radius, var(--_ui-default-input-radius, var(--ui-field-radius, var(--ui-radius-md))));
70
71
  background: var(--ui-input-surface, var(--_ui-default-input-surface, var(--ui-control-surface, var(--ui-surface-elevated))));
@@ -133,7 +134,11 @@
133
134
  var(
134
135
  --_ui-default-input-invalid-focus-shadow,
135
136
  var(--ui-control-inset),
136
- 0 0 0 3px color-mix(in srgb, var(--ui-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%, transparent)
137
+ 0 0 0 calc(var(--ui-focus-width) * 1.5) color-mix(
138
+ in srgb,
139
+ var(--ui-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%,
140
+ transparent
141
+ )
137
142
  )
138
143
  );
139
144
  }
@@ -148,8 +153,8 @@
148
153
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
149
154
  @media (forced-colors: active) {
150
155
  :scope:focus-visible {
151
- outline: var(--ui-input-focus-outline, var(--_ui-default-input-focus-outline, 2px solid Highlight));
152
- outline-offset: 1px;
156
+ outline: var(--ui-input-focus-outline, var(--_ui-default-input-focus-outline, var(--ui-focus-width) solid Highlight));
157
+ outline-offset: var(--ui-border-width);
153
158
  }
154
159
  }
155
160
 
@@ -40,7 +40,7 @@
40
40
  min-block-size: var(--_ui-list-item-min-size, var(--ui-control-size, 2.5rem));
41
41
  padding-block: var(--ui-list-item-padding-block, var(--_ui-list-item-padding-block, var(--ui-space-2)));
42
42
  padding-inline: var(--ui-list-item-padding-inline, var(--_ui-list-item-padding-inline, var(--ui-space-3)));
43
- border-radius: var(--ui-radius-md);
43
+ border-radius: var(--ui-selection-radius);
44
44
  color: var(--ui-text-primary);
45
45
  transition: background-color var(--ui-motion-fast) var(--ui-motion-ease), border-color var(--ui-motion-fast) var(--ui-motion-ease);
46
46
  }
@@ -48,7 +48,7 @@
48
48
  :scope[data-ui-list-item-state~="variant=card"] {
49
49
  padding-block: var(--ui-list-item-padding-block, var(--ui-space-3));
50
50
  padding-inline: var(--ui-list-item-padding-inline, var(--ui-space-4));
51
- border: 1px solid var(--ui-border-strong);
51
+ border: var(--ui-border-width) solid var(--ui-border-strong);
52
52
  border-radius: var(--ui-radius-lg);
53
53
  background: var(--ui-surface-raised);
54
54
  }
@@ -62,11 +62,12 @@
62
62
  }
63
63
 
64
64
  :scope[data-ui-list-item-state~="current"] {
65
- background: var(--ui-surface-hover);
65
+ background: var(--ui-selection-surface);
66
+ color: var(--ui-selection-text);
66
67
  }
67
68
 
68
69
  :scope:has(.title a[href]:focus-visible) {
69
- box-shadow: 0 0 0 2px var(--ui-focus-ring);
70
+ box-shadow: 0 0 0 var(--ui-focus-width) var(--ui-focus-ring);
70
71
  }
71
72
 
72
73
  .leading,
@@ -82,6 +83,10 @@
82
83
  font-size: var(--_ui-list-item-icon-size, var(--ui-font-size-lg));
83
84
  }
84
85
 
86
+ :scope[data-ui-list-item-state~="current"] .leading {
87
+ color: var(--ui-selection-text);
88
+ }
89
+
85
90
  /* Trailing controls take their own clicks, above the title link's stretched hit area. */
86
91
  .trailing {
87
92
  position: relative;
@@ -126,6 +131,17 @@
126
131
  display: none;
127
132
  }
128
133
 
134
+ @media (forced-colors: active) {
135
+ :scope:has(a:focus-visible) {
136
+ outline: var(--ui-focus-width) solid Highlight;
137
+ outline-offset: calc(-1 * var(--ui-focus-width));
138
+ }
139
+ :scope[data-ui-list-item-state~="current"]:not(:has(a:focus-visible)) {
140
+ outline: var(--ui-border-width) solid Highlight;
141
+ outline-offset: calc(-1 * var(--ui-border-width));
142
+ }
143
+ }
144
+
129
145
  /* A component that sets its display still honours the hidden attribute on its root. */
130
146
  :scope[hidden] {
131
147
  display: none;
@@ -165,5 +181,8 @@
165
181
 
166
182
  /* An unused region takes no space. */
167
183
 
184
+ @media (forced-colors: active) {
185
+ }
186
+
168
187
  /* A component that sets its display still honours the hidden attribute on its root. */
169
188
  }
@@ -79,7 +79,7 @@
79
79
 
80
80
  :scope > :where([data-slotted], [data-slotted] *):is(li.card) {
81
81
  padding: var(--_ui-list-native-padding-block, var(--ui-space-3)) var(--_ui-list-native-padding-inline, var(--ui-space-4));
82
- border: 1px solid var(--ui-border-strong);
82
+ border: var(--ui-border-width) solid var(--ui-border-strong);
83
83
  border-radius: var(--ui-radius-lg);
84
84
  background: var(--ui-surface-raised);
85
85
  list-style: none;
@@ -28,7 +28,7 @@
28
28
  min-inline-size: 0;
29
29
  margin: 0;
30
30
  padding: var(--ui-space-1);
31
- border: 1px solid var(--ui-listbox-border, var(--ui-control-border));
31
+ border: var(--ui-border-width) solid var(--ui-listbox-border, var(--ui-control-border));
32
32
  border-radius: var(--ui-listbox-radius, var(--ui-field-radius, var(--ui-radius-md)));
33
33
  background: var(--ui-listbox-surface, var(--ui-control-surface));
34
34
  color: var(--ui-text-primary);
@@ -72,8 +72,8 @@
72
72
 
73
73
  :scope:focus-visible {
74
74
  border-color: var(--ui-control-focus);
75
- outline: 2px solid var(--ui-focus-ring);
76
- outline-offset: 2px;
75
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
76
+ outline-offset: var(--ui-focus-width);
77
77
  box-shadow: var(--ui-listbox-focus-shadow, var(--ui-focus-halo));
78
78
  }
79
79
 
@@ -35,7 +35,7 @@
35
35
  padding: var(--ui-menu-item-padding-block, var(--_ui-default-menu-item-padding-block, var(--ui-space-2)))
36
36
  var(--ui-menu-item-padding-inline, var(--_ui-default-menu-item-padding-inline, var(--ui-space-3)));
37
37
  text-align: left;
38
- border-radius: var(--ui-menu-item-radius, var(--_ui-default-menu-item-radius, var(--ui-radius-md)));
38
+ border-radius: var(--ui-menu-item-radius, var(--_ui-default-menu-item-radius, var(--ui-selection-radius)));
39
39
  color: var(--ui-text-primary);
40
40
  font-size: var(--ui-menu-item-font-size, var(--_ui-default-menu-item-font-size, var(--ui-font-size-md)));
41
41
  font-weight: var(--ui-font-medium);
@@ -61,7 +61,7 @@
61
61
  box-sizing: border-box;
62
62
  inline-size: var(--_ui-default-menu-indicator-size, var(--ui-icon-size-sm));
63
63
  block-size: var(--_ui-default-menu-indicator-size, var(--ui-icon-size-sm));
64
- border: 1.5px solid var(--ui-control-border);
64
+ border: var(--ui-border-width) solid var(--ui-control-border);
65
65
  border-radius: var(--ui-radius-sm);
66
66
  color: var(--ui-surface);
67
67
  --_ui-default-icon-size: 0.75rem;
@@ -110,8 +110,8 @@
110
110
  }
111
111
 
112
112
  :scope:focus-visible {
113
- outline: 2px solid var(--ui-focus-ring);
114
- outline-offset: -2px;
113
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
114
+ outline-offset: calc(-1 * var(--ui-focus-width));
115
115
  }
116
116
 
117
117
  :scope[aria-disabled="true"] {
@@ -80,7 +80,7 @@
80
80
  max-inline-size: inherit;
81
81
  padding: var(--ui-space-1);
82
82
  background: var(--_ui-menu-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
83
- border: 1px solid var(--_ui-menu-border, var(--ui-overlay-border, var(--ui-border-strong)));
83
+ border: var(--ui-border-width) solid var(--_ui-menu-border, var(--ui-overlay-border, var(--ui-border-strong)));
84
84
  border-radius: var(--_ui-menu-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
85
85
  box-shadow: var(--_ui-menu-shadow, var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg))));
86
86
  max-block-size: inherit;
@@ -92,7 +92,7 @@
92
92
  block-size: 0;
93
93
  margin: var(--ui-space-1) 0;
94
94
  border: 0;
95
- border-block-start: 1px solid var(--ui-border-divider);
95
+ border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
96
96
  }
97
97
 
98
98
  :scope:not(:scope[data-ui-menu-state~="internalOpen"]):not(:scope[data-ui-menu-state~="inline"]) {
@@ -22,7 +22,7 @@
22
22
  background: var(--ui-border);
23
23
  box-shadow: inset 0 1px 2px rgb(0 0 0 / 0.1), inset 0 -1px rgb(255 255 255 / 0.22);
24
24
  /* Unseen until forced colours draw it, where the track's own colour is gone. */
25
- outline: 1px solid transparent;
25
+ outline: var(--ui-border-width) solid transparent;
26
26
  }
27
27
 
28
28
  :scope[data-ui-meter-state~="size=sm"] {
@@ -23,7 +23,7 @@
23
23
  belongs to. Label and description are one line each and end in an ellipsis, so every item in a
24
24
  navigation has the same height and the rail never grows sideways. */
25
25
  :scope {
26
- --_indicator-width: var(--ui-nav-item-indicator-width, 3px);
26
+ --_indicator-width: var(--ui-nav-item-indicator-width, var(--ui-accent-line-width));
27
27
  --_indicator-color: var(--ui-nav-item-indicator-color, var(--ui-accent));
28
28
  position: relative;
29
29
  box-sizing: border-box;
@@ -37,11 +37,11 @@
37
37
  padding-block: var(--ui-space-2);
38
38
  padding-inline: var(--ui-space-3);
39
39
  border: 0;
40
- border-radius: var(--ui-radius-md);
40
+ border-radius: var(--ui-selection-radius);
41
41
  background: transparent;
42
42
  color: var(--ui-text-secondary);
43
43
  font: inherit;
44
- font-weight: var(--ui-font-medium);
44
+ font-weight: var(--ui-font-normal);
45
45
  text-align: start;
46
46
  text-decoration: none;
47
47
  cursor: pointer;
@@ -57,32 +57,43 @@
57
57
  /* The ring is an outline, drawn inside the item: forced colors keep an outline where they drop a
58
58
  box shadow, and a scrolling rail cannot clip a ring that stays within the item. */
59
59
  :scope:focus-visible {
60
- outline: 2px solid var(--ui-focus-ring);
61
- outline-offset: -2px;
60
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
61
+ outline-offset: calc(-1 * var(--ui-focus-width));
62
62
  }
63
63
 
64
64
  :scope[aria-current] {
65
- background: var(--ui-nav-item-current-surface, var(--ui-accent-soft));
66
- color: var(--ui-accent-subtle-text, var(--ui-text-primary));
67
- font-weight: var(--ui-font-semibold);
65
+ background: var(--ui-nav-item-current-surface, var(--ui-selection-surface));
66
+ color: var(--ui-selection-text);
67
+ }
68
+
69
+ :scope[data-ui-nav-item-state~="variant=line"] {
70
+ border-radius: 0;
68
71
  }
69
72
 
70
- /* The bar on the start edge is a border, not a fill: forced colors replace backgrounds but keep a
73
+ /* A line treatment has straight corners and a continuous edge. Surface treatment has
74
+ shared rounded corners and no edge marker; never combine the two geometries.
75
+ The line is a border, not a fill: forced colors replace backgrounds but keep a
71
76
  border, so the current item stays marked in high contrast. Logical edges mirror it in a
72
77
  right-to-left page. */
73
78
  .indicator {
74
79
  position: absolute;
75
- inset-block: var(--ui-space-2);
80
+ inset-block: 0;
76
81
  inset-inline-start: 0;
77
82
  display: none;
78
83
  border-inline-start: var(--_indicator-width) solid var(--_indicator-color);
79
84
  }
80
85
 
81
- :scope[aria-current] .indicator {
86
+ :scope[data-ui-nav-item-state~="variant=line"][aria-current] .indicator {
82
87
  display: block;
83
88
  }
84
89
 
85
90
  @media (forced-colors: active) {
91
+ /* System colors may erase the selected fill. Trace the complete surface, without
92
+ creating an edge stripe; the stronger keyboard focus outline keeps precedence. */
93
+ :scope[data-ui-nav-item-state~="variant=surface"][aria-current]:not(:focus-visible) {
94
+ outline: var(--ui-border-width) solid Highlight;
95
+ outline-offset: calc(-1 * var(--ui-border-width));
96
+ }
86
97
  .indicator {
87
98
  border-inline-start-color: Highlight;
88
99
  }
@@ -125,6 +136,22 @@
125
136
  line-height: var(--ui-line-height-tight);
126
137
  }
127
138
 
139
+ :scope[data-ui-nav-item-state~="density=compact"] {
140
+ min-block-size: var(--ui-control-size-sm);
141
+ padding-block: var(--ui-space-1);
142
+ padding-inline: var(--ui-space-2);
143
+ }
144
+ :scope[data-ui-nav-item-state~="density=compact"] .leading,
145
+ :scope[data-ui-nav-item-state~="density=compact"] .label {
146
+ font-size: var(--ui-font-size-sm);
147
+ }
148
+
149
+ @media (pointer: coarse) {
150
+ :scope[data-ui-nav-item-state~="density=compact"] {
151
+ min-block-size: var(--ui-control-min-block-size);
152
+ }
153
+ }
154
+
128
155
  /* An unused region takes no space. */
129
156
  .leading:empty,
130
157
  .description:empty {
@@ -147,11 +174,18 @@
147
174
  /* The ring is an outline, drawn inside the item: forced colors keep an outline where they drop a
148
175
  box shadow, and a scrolling rail cannot clip a ring that stays within the item. */
149
176
 
150
- /* The bar on the start edge is a border, not a fill: forced colors replace backgrounds but keep a
177
+ /* A line treatment has straight corners and a continuous edge. Surface treatment has
178
+ shared rounded corners and no edge marker; never combine the two geometries.
179
+ The line is a border, not a fill: forced colors replace backgrounds but keep a
151
180
  border, so the current item stays marked in high contrast. Logical edges mirror it in a
152
181
  right-to-left page. */
153
182
 
154
183
  @media (forced-colors: active) {
184
+ /* System colors may erase the selected fill. Trace the complete surface, without
185
+ creating an edge stripe; the stronger keyboard focus outline keeps precedence. */
186
+ }
187
+
188
+ @media (pointer: coarse) {
155
189
  }
156
190
 
157
191
  /* An unused region takes no space. */
@@ -58,7 +58,7 @@
58
58
  overflow: auto;
59
59
  padding: var(--_ui-popover-padding, var(--ui-space-3));
60
60
  background: var(--_ui-popover-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
61
- border: 1px solid var(--_ui-popover-border, var(--ui-overlay-border, var(--ui-border-strong)));
61
+ border: var(--ui-border-width) solid var(--_ui-popover-border, var(--ui-overlay-border, var(--ui-border-strong)));
62
62
  border-radius: var(--_ui-popover-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
63
63
  box-shadow: var(--_ui-popover-shadow, var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg))));
64
64
  }
@@ -92,6 +92,19 @@
92
92
  }
93
93
  }
94
94
 
95
+ :scope[data-ui-popover-state~="size=sm"] {
96
+ inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
97
+ max-inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
98
+ }
99
+ :scope[data-ui-popover-state~="size=md"] {
100
+ inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
101
+ max-inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
102
+ }
103
+ :scope[data-ui-popover-state~="size=lg"] {
104
+ inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
105
+ max-inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
106
+ }
107
+
95
108
  :scope[hidden] {
96
109
  display: none;
97
110
  }
@@ -55,8 +55,8 @@
55
55
  }
56
56
 
57
57
  input:focus-visible {
58
- outline: 2px solid var(--ui-focus-ring, var(--ui-accent-solid));
59
- outline-offset: 2px;
58
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring, var(--ui-accent-solid));
59
+ outline-offset: var(--ui-focus-width);
60
60
  }
61
61
 
62
62
  :scope[data-ui-radio-state~="disabled"] {
@@ -37,6 +37,16 @@
37
37
  --_ui-scroll-fade-inline: to left;
38
38
  }
39
39
 
40
+ :scope[data-ui-scroll-area-state~="size=sm"] {
41
+ max-block-size: 9.375rem;
42
+ }
43
+ :scope[data-ui-scroll-area-state~="size=md"] {
44
+ max-block-size: 20rem;
45
+ }
46
+ :scope[data-ui-scroll-area-state~="size=lg"] {
47
+ max-block-size: 30rem;
48
+ }
49
+
40
50
  /* A component that sets its display still honours the hidden attribute on its root. */
41
51
  :scope[hidden] {
42
52
  display: none;