@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
@@ -101,13 +101,13 @@
101
101
 
102
102
  .looma-editor__mobile-toolbar-shell :host button.active,
103
103
  .looma-editor__mobile-toolbar-shell :host button.selected {
104
- background: var(--ui-accent-soft, var(--ui-accent-subtle, #e8f0fb));
104
+ background: var(--ui-accent-soft, var(--ui-accent-subtle));
105
105
  }
106
106
 
107
107
  .looma-editor__mobile-toolbar-shell :host .menu {
108
108
  top: auto;
109
109
  right: 0;
110
- bottom: calc(100% + var(--ui-space-2, 8px));
110
+ bottom: calc(100% + var(--ui-space-2));
111
111
  max-height: min(50dvh, 22rem);
112
112
  overflow-y: auto;
113
113
  overscroll-behavior: contain;
@@ -115,11 +115,11 @@
115
115
  :host {
116
116
  display: inline-flex;
117
117
  align-items: center;
118
- gap: var(--ui-space-1, 4px);
119
- padding: var(--ui-space-1, 4px);
120
- background: color-mix(in srgb, var(--ui-surface, #fff) 94%, transparent);
121
- border: 1px solid var(--ui-border, #e5e7eb);
122
- border-radius: calc(var(--ui-radius-md, 6px) + 2px);
118
+ gap: var(--ui-space-1);
119
+ padding: var(--ui-space-1);
120
+ background: color-mix(in srgb, var(--ui-surface) 94%, transparent);
121
+ border: 1px solid var(--ui-border);
122
+ border-radius: calc(var(--ui-radius-md) + 2px);
123
123
  box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
124
124
  backdrop-filter: blur(10px);
125
125
  }
@@ -134,7 +134,7 @@
134
134
  .sep {
135
135
  width: 1px;
136
136
  align-self: stretch;
137
- background: var(--ui-border, #e5e7eb);
137
+ background: var(--ui-border);
138
138
  }
139
139
 
140
140
  .overflow {
@@ -145,31 +145,31 @@
145
145
  display: inline-flex;
146
146
  align-items: center;
147
147
  justify-content: center;
148
- gap: var(--ui-space-1-5, 6px);
148
+ gap: var(--ui-space-2);
149
149
  min-height: 32px;
150
150
  border: 0;
151
- border-radius: var(--ui-radius-sm, 4px);
151
+ border-radius: var(--ui-radius-sm);
152
152
  background: transparent;
153
- color: var(--ui-text-primary, #111827);
153
+ color: var(--ui-text-primary);
154
154
  cursor: pointer;
155
- font-size: var(--ui-text-sm, 0.875rem);
155
+ font-size: var(--ui-font-size-sm);
156
156
  font-weight: 500;
157
157
  line-height: 1;
158
- padding: var(--ui-space-1-5, 6px) var(--ui-space-2, 8px);
158
+ padding: var(--ui-space-2) var(--ui-space-2);
159
159
  white-space: nowrap;
160
160
  }
161
161
 
162
162
  :host button:hover {
163
- background: var(--ui-surface-hover, #f3f4f6);
163
+ background: var(--ui-surface-hover);
164
164
  }
165
165
 
166
166
  :host button.active {
167
- background: var(--ui-accent-soft, var(--ui-accent-subtle, #e8f0fb));
168
- color: var(--ui-accent-active, #003d7a);
167
+ background: var(--ui-accent-soft, var(--ui-accent-subtle));
168
+ color: var(--ui-accent-active);
169
169
  }
170
170
 
171
171
  .group button {
172
- border-radius: var(--ui-radius-sm, 4px);
172
+ border-radius: var(--ui-radius-sm);
173
173
  }
174
174
 
175
175
  .group button + button {
@@ -178,11 +178,11 @@
178
178
 
179
179
  :host .more {
180
180
  border: 0;
181
- border-radius: var(--ui-radius-sm, 4px);
181
+ border-radius: var(--ui-radius-sm);
182
182
  }
183
183
 
184
184
  :host button.danger {
185
- color: var(--ui-danger, #dc2626);
185
+ color: var(--ui-danger);
186
186
  }
187
187
 
188
188
  :host {
@@ -202,13 +202,13 @@
202
202
 
203
203
  .menu {
204
204
  position: absolute;
205
- top: calc(100% + var(--ui-space-2, 8px));
205
+ top: calc(100% + var(--ui-space-2));
206
206
  right: 0;
207
207
  min-width: 12rem;
208
- padding: var(--ui-space-1, 4px);
209
- background: var(--ui-surface, #fff);
210
- border: 1px solid var(--ui-border, #e5e7eb);
211
- border-radius: var(--ui-radius-md, 6px);
208
+ padding: var(--ui-space-1);
209
+ background: var(--ui-surface);
210
+ border: 1px solid var(--ui-border);
211
+ border-radius: var(--ui-radius-md);
212
212
  box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
213
213
  display: flex;
214
214
  flex-direction: column;
@@ -217,18 +217,18 @@
217
217
  }
218
218
 
219
219
  .menu-section + .menu-section {
220
- margin-top: var(--ui-space-1, 4px);
221
- padding-top: var(--ui-space-1, 4px);
222
- border-top: 1px solid color-mix(in srgb, var(--ui-border, #e5e7eb) 80%, transparent);
220
+ margin-top: var(--ui-space-1);
221
+ padding-top: var(--ui-space-1);
222
+ border-top: 1px solid color-mix(in srgb, var(--ui-border) 80%, transparent);
223
223
  }
224
224
 
225
225
  .menu-heading {
226
- padding: var(--ui-space-1, 4px) var(--ui-space-2, 8px);
226
+ padding: var(--ui-space-1) var(--ui-space-2);
227
227
  font-size: 0.6875rem;
228
228
  font-weight: 700;
229
229
  letter-spacing: 0.05em;
230
230
  text-transform: uppercase;
231
- color: var(--ui-text-muted, #6b7280);
231
+ color: var(--ui-text-muted);
232
232
  }
233
233
 
234
234
  .menu button {
@@ -245,7 +245,7 @@
245
245
  }
246
246
 
247
247
  :host .swatch-button {
248
- gap: var(--ui-space-1, 4px);
248
+ gap: var(--ui-space-1);
249
249
  justify-content: flex-start;
250
250
  }
251
251
 
@@ -253,19 +253,19 @@
253
253
  width: 14px;
254
254
  height: 14px;
255
255
  flex: 0 0 14px;
256
- border: 1px solid color-mix(in srgb, var(--ui-border, #e5e7eb) 80%, #000);
256
+ border: 1px solid color-mix(in srgb, var(--ui-border) 80%, #000);
257
257
  border-radius: 3px;
258
258
  background: var(--ui-editor-table-toolbar-swatch);
259
259
  }
260
260
 
261
261
  .swatch.default {
262
262
  background:
263
- linear-gradient(135deg, transparent 44%, var(--ui-danger, #dc2626) 46% 54%, transparent 56%),
264
- var(--ui-surface, #fff);
263
+ linear-gradient(135deg, transparent 44%, var(--ui-danger) 46% 54%, transparent 56%),
264
+ var(--ui-surface);
265
265
  }
266
266
 
267
267
  .swatch-button.selected {
268
- background: var(--ui-accent-soft, var(--ui-accent-subtle, #e8f0fb));
268
+ background: var(--ui-accent-soft, var(--ui-accent-subtle));
269
269
  }
270
270
 
271
271
  :host[hidden] {
@@ -17,8 +17,8 @@
17
17
  overflow-x: auto;
18
18
  scrollbar-width: none;
19
19
  white-space: nowrap;
20
- background: var(--ui-editor-toolbar-bg, var(--ui-surface, #fff));
21
- border-bottom: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
20
+ background: var(--ui-editor-toolbar-surface, var(--ui-surface));
21
+ border-bottom: 1px solid var(--ui-editor-toolbar-border, var(--ui-border));
22
22
  }
23
23
 
24
24
  :host::-webkit-scrollbar {
@@ -32,7 +32,7 @@
32
32
  :slotted(.divider) {
33
33
  width: 1px;
34
34
  height: 20px;
35
- background: var(--ui-editor-toolbar-divider, var(--ui-border, #e5e7eb));
35
+ background: var(--ui-editor-toolbar-divider, var(--ui-border));
36
36
  flex-shrink: 0;
37
37
  margin: 0 var(--ui-editor-toolbar-divider-margin, 4px);
38
38
  }
@@ -45,9 +45,9 @@
45
45
  min-height: auto;
46
46
  padding: var(--ui-editor-toolbar-floating-padding, 4px);
47
47
  overflow-x: visible;
48
- background: color-mix(in srgb, var(--ui-editor-toolbar-bg, var(--ui-surface, #fff)) 96%, transparent);
49
- border: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
50
- border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg, 10px));
48
+ background: color-mix(in srgb, var(--ui-editor-toolbar-surface, var(--ui-surface)) 96%, transparent);
49
+ border: 1px solid var(--ui-editor-toolbar-border, var(--ui-border));
50
+ border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
51
51
  box-shadow: var(--ui-editor-toolbar-floating-shadow, var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12)));
52
52
  backdrop-filter: blur(10px);
53
53
  }
@@ -60,7 +60,7 @@
60
60
  left: 0;
61
61
  right: 0;
62
62
  min-height: var(--ui-editor-toolbar-mobile-min-height, 56px);
63
- border-top: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
63
+ border-top: 1px solid var(--ui-editor-toolbar-border, var(--ui-border));
64
64
  border-bottom: none;
65
65
  box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
66
66
  }
@@ -69,8 +69,8 @@
69
69
  position: static;
70
70
  inset: auto;
71
71
  min-height: auto;
72
- border: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
73
- border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg, 10px));
72
+ border: 1px solid var(--ui-editor-toolbar-border, var(--ui-border));
73
+ border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
74
74
  box-shadow: var(--ui-editor-toolbar-floating-shadow, var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12)));
75
75
  }
76
76
  }
@@ -8,13 +8,13 @@
8
8
  <style>
9
9
  :host {
10
10
  position: fixed;
11
- inset-block-end: calc(var(--ui-floating-action-button-bottom, var(--ui-space-6, 1.5rem)) + env(safe-area-inset-bottom));
11
+ inset-block-end: calc(var(--ui-floating-action-button-inset-block-end, var(--ui-space-6)) + env(safe-area-inset-bottom));
12
12
  inset-inline-end: max(
13
- var(--ui-floating-action-button-inline-end, var(--ui-space-5, 1.25rem)),
13
+ var(--ui-floating-action-button-inset-inline-end, var(--ui-space-5)),
14
14
  env(safe-area-inset-right)
15
15
  );
16
- inline-size: var(--ui-floating-action-button-size, 56px);
17
- block-size: var(--ui-floating-action-button-size, 56px);
16
+ inline-size: var(--ui-control-min-block-size);
17
+ block-size: var(--ui-control-min-block-size);
18
18
  display: inline-flex;
19
19
  z-index: var(--ui-floating-action-button-z-index, 100);
20
20
  }
@@ -28,33 +28,27 @@
28
28
  display: inline-flex;
29
29
  align-items: center;
30
30
  justify-content: center;
31
- background: var(--ui-floating-action-button-bg, var(--ui-accent-solid));
32
- color: var(--ui-floating-action-button-color, var(--ui-text-on-accent));
33
- box-shadow: var(
34
- --ui-floating-action-button-shadow,
35
- 0 4px 12px color-mix(in srgb, var(--ui-accent-solid) 40%, transparent)
36
- );
31
+ background: var(--ui-accent);
32
+ color: var(--ui-on-accent);
33
+ box-shadow: 0 4px 12px color-mix(in srgb, var(--ui-accent) 40%, transparent);
37
34
  cursor: pointer;
38
35
  transition:
39
- background-color var(--ui-motion-fast, 160ms) var(--ui-motion-ease, ease),
40
- transform var(--ui-motion-fast, 160ms) var(--ui-motion-ease, ease),
41
- box-shadow var(--ui-motion-fast, 160ms) var(--ui-motion-ease, ease);
36
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
37
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
38
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
42
39
  }
43
40
 
44
41
  :host:hover:enabled {
45
- background: var(--ui-floating-action-button-hover-bg, var(--ui-accent-hover));
46
- box-shadow: var(
47
- --ui-floating-action-button-hover-shadow,
48
- 0 6px 16px color-mix(in srgb, var(--ui-accent-solid) 50%, transparent)
49
- );
42
+ background: var(--ui-accent-hover);
43
+ box-shadow: 0 6px 16px color-mix(in srgb, var(--ui-accent) 50%, transparent);
50
44
  }
51
45
 
52
46
  :host:active:enabled {
53
- transform: scale(var(--ui-floating-action-button-active-scale, 0.94));
47
+ transform: scale(0.94);
54
48
  }
55
49
 
56
50
  :host:focus-visible {
57
- outline: 2px solid var(--ui-focus-ring, currentColor);
51
+ outline: 2px solid var(--ui-focus-ring);
58
52
  outline-offset: 2px;
59
53
  }
60
54
 
@@ -64,8 +58,8 @@
64
58
  }
65
59
 
66
60
  :slotted(svg) {
67
- inline-size: var(--ui-floating-action-button-icon-size, 24px);
68
- block-size: var(--ui-floating-action-button-icon-size, 24px);
61
+ inline-size: var(--ui-icon-size-lg);
62
+ block-size: var(--ui-icon-size-lg);
69
63
  flex-shrink: 0;
70
64
  }
71
65
 
@@ -6,7 +6,7 @@
6
6
  <div><slot></slot></div>
7
7
  <style>
8
8
  :host {
9
- --_grid-gap: var(--ui-space-4, 1rem);
9
+ --_grid-gap: var(--ui-space-4);
10
10
  --_grid-min: 12rem;
11
11
  display: grid;
12
12
  gap: var(--ui-grid-gap, var(--_grid-gap));
@@ -17,19 +17,19 @@
17
17
  }
18
18
 
19
19
  :host-state([gap="xs"]) {
20
- --_grid-gap: var(--ui-space-2, 0.5rem);
20
+ --_grid-gap: var(--ui-space-2);
21
21
  }
22
22
  :host-state([gap="s"]) {
23
- --_grid-gap: var(--ui-space-3, 0.75rem);
23
+ --_grid-gap: var(--ui-space-3);
24
24
  }
25
25
  :host-state([gap="m"]) {
26
- --_grid-gap: var(--ui-space-4, 1rem);
26
+ --_grid-gap: var(--ui-space-4);
27
27
  }
28
28
  :host-state([gap="l"]) {
29
- --_grid-gap: var(--ui-space-5, 1.5rem);
29
+ --_grid-gap: var(--ui-space-5);
30
30
  }
31
31
  :host-state([gap="xl"]) {
32
- --_grid-gap: var(--ui-space-6, 2rem);
32
+ --_grid-gap: var(--ui-space-6);
33
33
  }
34
34
  :host-state([min="md"]) {
35
35
  --_grid-min: 16rem;
@@ -23,11 +23,11 @@
23
23
  position: absolute;
24
24
  inset: 50% auto auto 50%;
25
25
  z-index: 1;
26
- inline-size: var(--ui-affordance-guide-size, 0.25rem);
27
- block-size: var(--ui-affordance-guide-size, 0.25rem);
28
- border-radius: var(--ui-radius-round, 999px);
26
+ inline-size: var(--ui-affordance-guide-size);
27
+ block-size: var(--ui-affordance-guide-size);
28
+ border-radius: var(--ui-radius-round);
29
29
  background: var(--ui-affordance-guide-color, var(--ui-border-strong));
30
- opacity: var(--ui-affordance-guide-opacity, 0.42);
30
+ opacity: var(--ui-affordance-guide-opacity);
31
31
  transform: translate(-50%, -50%);
32
32
  transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
33
33
  pointer-events: none;
@@ -50,16 +50,18 @@
50
50
  }
51
51
 
52
52
  :host {
53
+ /* The size prop resolves here; --ui-icon-button-size overrides it on an element. */
54
+ --_size: 2rem;
53
55
  appearance: none;
54
- inline-size: var(--ui-icon-button-size, 2rem);
55
- block-size: var(--ui-icon-button-size, 2rem);
56
- min-inline-size: var(--ui-icon-button-size, 2rem);
57
- min-block-size: var(--ui-icon-button-size, 2rem);
56
+ inline-size: var(--ui-icon-button-size, var(--_size));
57
+ block-size: var(--ui-icon-button-size, var(--_size));
58
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
59
+ min-block-size: var(--ui-icon-button-size, var(--_size));
58
60
  padding: 0;
59
61
  margin: 0;
60
62
  border: 1px solid transparent;
61
- border-radius: var(--ui-icon-button-radius, var(--ui-radius-2));
62
- background: var(--ui-icon-button-bg, transparent);
63
+ border-radius: var(--ui-icon-button-radius, var(--ui-radius-md));
64
+ background: var(--ui-icon-button-surface, transparent);
63
65
  color: inherit;
64
66
  display: inline-flex;
65
67
  align-items: center;
@@ -90,8 +92,8 @@
90
92
  content: "";
91
93
  position: absolute;
92
94
  inset: 50% auto auto 50%;
93
- inline-size: max(100%, var(--ui-control-min-block-size, 2.75rem));
94
- block-size: max(100%, var(--ui-control-min-block-size, 2.75rem));
95
+ inline-size: max(100%, var(--ui-control-min-block-size));
96
+ block-size: max(100%, var(--ui-control-min-block-size));
95
97
  transform: translate(-50%, -50%);
96
98
  }
97
99
  }
@@ -104,38 +106,40 @@
104
106
  content: "";
105
107
  position: absolute;
106
108
  inset: 50% auto auto 50%;
107
- inline-size: max(100%, var(--ui-control-min-block-size, 2.75rem));
108
- block-size: max(100%, var(--ui-control-min-block-size, 2.75rem));
109
+ inline-size: max(100%, var(--ui-control-min-block-size));
110
+ block-size: max(100%, var(--ui-control-min-block-size));
109
111
  transform: translate(-50%, -50%);
110
112
  }
111
113
 
112
114
  :host-state([size="sm"]) {
113
- inline-size: var(--ui-icon-button-size-sm, 1.75rem);
114
- block-size: var(--ui-icon-button-size-sm, 1.75rem);
115
- min-inline-size: var(--ui-icon-button-size-sm, 1.75rem);
116
- min-block-size: var(--ui-icon-button-size-sm, 1.75rem);
115
+ --_size: 1.75rem;
116
+ inline-size: var(--ui-icon-button-size, var(--_size));
117
+ block-size: var(--ui-icon-button-size, var(--_size));
118
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
119
+ min-block-size: var(--ui-icon-button-size, var(--_size));
117
120
  }
118
121
 
119
122
  :host-state([size="lg"]) {
120
- inline-size: var(--ui-icon-button-size-lg, 2.5rem);
121
- block-size: var(--ui-icon-button-size-lg, 2.5rem);
122
- min-inline-size: var(--ui-icon-button-size-lg, 2.5rem);
123
- min-block-size: var(--ui-icon-button-size-lg, 2.5rem);
123
+ --_size: 2.5rem;
124
+ inline-size: var(--ui-icon-button-size, var(--_size));
125
+ block-size: var(--ui-icon-button-size, var(--_size));
126
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
127
+ min-block-size: var(--ui-icon-button-size, var(--_size));
124
128
  }
125
129
 
126
130
  :host-state([round]) {
127
- border-radius: var(--ui-radius-round, 999px);
131
+ border-radius: var(--ui-radius-round);
128
132
  }
129
133
 
130
134
  :host-state([variant="outline"]) {
131
135
  border-color: var(--ui-icon-button-border, var(--ui-border-default));
132
- background: var(--ui-icon-button-outline-bg, var(--ui-surface-default));
133
- color: var(--ui-icon-button-outline-color, var(--ui-text-primary));
136
+ background: var(--ui-icon-button-outline-surface, var(--ui-surface-default));
137
+ color: var(--ui-icon-button-outline-text, var(--ui-text-primary));
134
138
  }
135
139
 
136
140
  :host-state([variant="solid"]) {
137
- background: var(--ui-icon-button-solid-bg, var(--ui-accent-solid));
138
- color: var(--ui-icon-button-solid-color, var(--ui-text-on-accent));
141
+ background: var(--ui-icon-button-solid-surface, var(--ui-accent-solid));
142
+ color: var(--ui-icon-button-solid-text, var(--ui-text-on-accent));
139
143
  box-shadow: var(
140
144
  --ui-icon-button-solid-shadow,
141
145
  0 1px 2px color-mix(in srgb, var(--ui-accent-solid) 18%, transparent)
@@ -144,8 +148,8 @@
144
148
 
145
149
  :host:hover:enabled {
146
150
  /* Derived from the text colour so the ghost hover shows on any background. */
147
- background: var(--ui-icon-button-hover-bg, color-mix(in srgb, currentColor 8%, transparent));
148
- color: var(--ui-icon-button-hover-color, var(--ui-text-primary));
151
+ background: var(--ui-icon-button-hover-surface, color-mix(in srgb, currentColor 8%, transparent));
152
+ color: var(--ui-icon-button-hover-text, var(--ui-text-primary));
149
153
  }
150
154
 
151
155
  :host-state([variant="outline"]):hover:enabled {
@@ -153,7 +157,7 @@
153
157
  }
154
158
 
155
159
  :host-state([variant="solid"]):hover:enabled {
156
- background: var(--ui-icon-button-solid-hover-bg, var(--ui-accent-hover));
160
+ background: var(--ui-icon-button-solid-hover-surface, var(--ui-accent-hover));
157
161
  }
158
162
 
159
163
  :host:active:enabled {
@@ -168,31 +172,31 @@
168
172
  /* Disabled colours fall back to each variant's own; ghost takes only the icon colour. */
169
173
  :host:disabled {
170
174
  opacity: var(--ui-icon-button-disabled-opacity, 0.6);
171
- color: var(--ui-icon-button-disabled-color, inherit);
175
+ color: var(--ui-icon-button-disabled-text, inherit);
172
176
  cursor: not-allowed;
173
177
  }
174
178
 
175
179
  :host-state([variant="outline"]):disabled {
176
180
  border-color: var(--ui-icon-button-disabled-border, var(--ui-icon-button-border, var(--ui-border-default)));
177
- background-color: var(--ui-icon-button-disabled-bg, var(--ui-icon-button-outline-bg, var(--ui-surface-default)));
178
- color: var(--ui-icon-button-disabled-color, var(--ui-icon-button-outline-color, var(--ui-text-primary)));
181
+ background-color: var(--ui-icon-button-disabled-surface, var(--ui-icon-button-outline-surface, var(--ui-surface-default)));
182
+ color: var(--ui-icon-button-disabled-text, var(--ui-icon-button-outline-text, var(--ui-text-primary)));
179
183
  }
180
184
 
181
185
  :host-state([variant="solid"]):disabled {
182
- background-color: var(--ui-icon-button-disabled-bg, var(--ui-icon-button-solid-bg, var(--ui-accent-solid)));
183
- color: var(--ui-icon-button-disabled-color, var(--ui-icon-button-solid-color, var(--ui-text-on-accent)));
186
+ background-color: var(--ui-icon-button-disabled-surface, var(--ui-icon-button-solid-surface, var(--ui-accent-solid)));
187
+ color: var(--ui-icon-button-disabled-text, var(--ui-icon-button-solid-text, var(--ui-text-on-accent)));
184
188
  }
185
189
 
186
190
  :host {
187
- --_icon-button-icon-default: var(--ui-icon-size-md, 1.25rem);
191
+ --_icon-button-icon-default: var(--ui-icon-size-md);
188
192
  }
189
193
 
190
194
  :host-state([size="sm"]) {
191
- --_icon-button-icon-default: var(--ui-icon-size-sm, 1rem);
195
+ --_icon-button-icon-default: var(--ui-icon-size-sm);
192
196
  }
193
197
 
194
198
  :host-state([size="lg"]) {
195
- --_icon-button-icon-default: var(--ui-icon-size-lg, 1.5rem);
199
+ --_icon-button-icon-default: var(--ui-icon-size-lg);
196
200
  }
197
201
 
198
202
  :slotted(svg) {
@@ -13,12 +13,12 @@
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
  appearance: none;
20
20
  border: 1px solid var(--ui-control-border, var(--ui-border-strong));
21
- border-radius: var(--ui-input-radius, var(--ui-radius-2));
21
+ border-radius: var(--ui-input-radius, var(--ui-radius-md));
22
22
  background: var(--ui-control-surface, var(--ui-surface-elevated));
23
23
  color: var(--ui-text-primary);
24
24
  font: inherit;
@@ -1,5 +1,6 @@
1
1
  <template component="ui-menu" controller="./ui-menu.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="open" type="boolean" default="false">Whether the menu is open initially or when set externally.</prop>
4
5
  <prop name="for" type="string" default="">ID of the control that toggles and anchors the menu.</prop>
5
6
  <prop name="placement" type="string" default="bottom-start">Positions an associated menu relative to its trigger.</prop>
@@ -13,13 +14,23 @@
13
14
  </defs>
14
15
  <div role="menu" aria-orientation="vertical"><div class="surface"><slot></slot></div></div>
15
16
  <style>
17
+ /* Compact sets the part tokens its items read, so nothing has to rescale a global. */
18
+ :host-state([density="compact"]) {
19
+ --ui-menu-item-padding-block: var(--ui-space-1);
20
+ --ui-menu-item-padding-inline: var(--ui-space-2);
21
+ --ui-menu-item-font-size: var(--ui-font-size-sm);
22
+ --ui-menu-item-radius: var(--ui-radius-sm);
23
+ padding: var(--ui-space-1);
24
+ gap: 0;
25
+ }
26
+
16
27
  :host {
17
28
  display: flex;
18
29
  flex-direction: column;
19
30
  box-sizing: border-box;
20
31
  inline-size: max-content;
21
- min-inline-size: min(12rem, calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2, 0.5rem)) * 2));
22
- max-inline-size: calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2, 0.5rem)) * 2);
32
+ min-inline-size: min(12rem, calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2));
33
+ max-inline-size: calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2);
23
34
  padding: 0;
24
35
  border: 0;
25
36
  outline: 0;
@@ -37,7 +48,7 @@
37
48
  padding: var(--ui-space-1);
38
49
  background: var(--ui-surface-elevated);
39
50
  border: 1px solid var(--ui-border-default);
40
- border-radius: var(--ui-radius-3);
51
+ border-radius: var(--ui-radius-lg);
41
52
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
42
53
  max-block-size: inherit;
43
54
  overflow: auto;
@@ -52,7 +63,7 @@
52
63
  inset: auto;
53
64
  margin: 0;
54
65
  overflow: visible;
55
- max-block-size: calc(100dvh - var(--ui-menu-viewport-gap, var(--ui-space-2, 0.5rem)) * 2);
66
+ max-block-size: calc(100dvh - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2);
56
67
  opacity: 0;
57
68
  transform: translateY(-4px) scale(0.99);
58
69
  transition:
@@ -9,19 +9,19 @@
9
9
  display: block;
10
10
  box-sizing: border-box;
11
11
  width: 100%;
12
- padding: var(--ui-space-2) var(--ui-space-3);
12
+ padding: var(--ui-menu-item-padding-block, var(--ui-space-2)) var(--ui-menu-item-padding-inline, var(--ui-space-3));
13
13
  text-align: left;
14
- border-radius: var(--ui-radius-2);
14
+ border-radius: var(--ui-menu-item-radius, var(--ui-radius-md));
15
15
  color: var(--ui-text-primary);
16
- font-size: var(--ui-font-size-md);
17
- font-weight: var(--ui-font-medium, 500);
16
+ font-size: var(--ui-menu-item-font-size, var(--ui-font-size-md));
17
+ font-weight: var(--ui-font-medium);
18
18
  cursor: pointer;
19
19
  outline: none;
20
20
  transition: background-color var(--ui-motion-fast) var(--ui-motion-ease), color var(--ui-motion-fast) var(--ui-motion-ease);
21
21
  }
22
22
 
23
23
  :host:is(:hover, :focus-visible):not([aria-disabled="true"]) {
24
- background: var(--ui-surface-subtle);
24
+ background: var(--ui-menu-item-hover-surface, var(--ui-surface-subtle));
25
25
  }
26
26
 
27
27
  :host[aria-disabled="true"] {
@@ -19,9 +19,9 @@
19
19
  box-sizing: border-box;
20
20
  max-inline-size: min(
21
21
  20rem,
22
- calc(100vw - var(--ui-popover-viewport-gap, var(--ui-space-2, 0.5rem)) * 2)
22
+ calc(100vw - var(--ui-popover-viewport-gap, var(--ui-space-2)) * 2)
23
23
  );
24
- max-block-size: calc(100dvh - var(--ui-popover-viewport-gap, var(--ui-space-2, 0.5rem)) * 2);
24
+ max-block-size: calc(100dvh - var(--ui-popover-viewport-gap, var(--ui-space-2)) * 2);
25
25
  overflow: visible;
26
26
  padding: 0;
27
27
  border: 0;
@@ -39,7 +39,7 @@
39
39
  padding: var(--ui-space-3);
40
40
  background: var(--ui-surface-elevated);
41
41
  border: 1px solid var(--ui-border-default);
42
- border-radius: var(--ui-radius-3);
42
+ border-radius: var(--ui-radius-lg);
43
43
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
44
44
  }
45
45
 
@@ -7,7 +7,7 @@
7
7
  <div role="region" tabindex="0"><slot></slot></div>
8
8
  <style>
9
9
  :host {
10
- --_reel-gap: var(--ui-space-4, 1rem);
10
+ --_reel-gap: var(--ui-space-4);
11
11
  --_reel-item-width: auto;
12
12
  display: flex;
13
13
  inline-size: 100%;
@@ -26,19 +26,19 @@
26
26
  }
27
27
 
28
28
  :host-state([gap="xs"]) {
29
- --_reel-gap: var(--ui-space-2, 0.5rem);
29
+ --_reel-gap: var(--ui-space-2);
30
30
  }
31
31
  :host-state([gap="s"]) {
32
- --_reel-gap: var(--ui-space-3, 0.75rem);
32
+ --_reel-gap: var(--ui-space-3);
33
33
  }
34
34
  :host-state([gap="m"]) {
35
- --_reel-gap: var(--ui-space-4, 1rem);
35
+ --_reel-gap: var(--ui-space-4);
36
36
  }
37
37
  :host-state([gap="l"]) {
38
- --_reel-gap: var(--ui-space-5, 1.5rem);
38
+ --_reel-gap: var(--ui-space-5);
39
39
  }
40
40
  :host-state([gap="xl"]) {
41
- --_reel-gap: var(--ui-space-6, 2rem);
41
+ --_reel-gap: var(--ui-space-6);
42
42
  }
43
43
  :host-state([itemWidth="sm"]) {
44
44
  --_reel-item-width: 12rem;