@threadlabs/looma 0.12.6 → 0.13.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 (199) hide show
  1. package/components/ui-action-bar/ui-action-bar.html +10 -1
  2. package/components/ui-avatar/ui-avatar.html +18 -0
  3. package/components/ui-avatar-group/ui-avatar-group.html +16 -2
  4. package/components/ui-badge/ui-badge.html +42 -0
  5. package/components/ui-button/ui-button.html +70 -0
  6. package/components/ui-callout/ui-callout.html +55 -4
  7. package/components/ui-checkbox/ui-checkbox.html +16 -3
  8. package/components/ui-cluster/ui-cluster.html +7 -1
  9. package/components/ui-combobox/ui-combobox.html +66 -12
  10. package/components/ui-container/ui-container.html +12 -1
  11. package/components/ui-context-menu/ui-context-menu.html +10 -1
  12. package/components/ui-dialog/ui-dialog.html +21 -4
  13. package/components/ui-disclosure/ui-disclosure.html +23 -4
  14. package/components/ui-editable/ui-editable.html +1 -1
  15. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +2 -2
  16. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +2 -2
  17. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +8 -8
  18. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +3 -3
  19. package/components/ui-floating-action-button/ui-floating-action-button.html +14 -0
  20. package/components/ui-form-field/ui-form-field.html +10 -1
  21. package/components/ui-grid/ui-grid.html +11 -1
  22. package/components/ui-icon/ui-icon.html +17 -3
  23. package/components/ui-icon-button/ui-icon-button.html +81 -3
  24. package/components/ui-input/ui-input.html +68 -13
  25. package/components/ui-input-group/ui-input-group.html +14 -13
  26. package/components/ui-list/ui-list.html +10 -0
  27. package/components/ui-list-item/ui-list-item.html +22 -1
  28. package/components/ui-menu/ui-menu.html +17 -5
  29. package/components/ui-menu-item/ui-menu-item.html +30 -3
  30. package/components/ui-nav-item/ui-nav-item.html +14 -0
  31. package/components/ui-popover/ui-popover.html +6 -0
  32. package/components/ui-radio/ui-radio.html +16 -3
  33. package/components/ui-reel/ui-reel.html +15 -2
  34. package/components/ui-search-result-row/ui-search-result-row.html +34 -0
  35. package/components/ui-search-shell/ui-search-shell.html +65 -11
  36. package/components/ui-select/ui-select.html +15 -1
  37. package/components/ui-separator/ui-separator.html +9 -2
  38. package/components/ui-sidebar/ui-sidebar.html +22 -1
  39. package/components/ui-stack/ui-stack.html +7 -1
  40. package/components/ui-switch/ui-switch.html +21 -3
  41. package/components/ui-switcher/ui-switcher.html +18 -5
  42. package/components/ui-tabs/ui-tabs.html +21 -2
  43. package/components/ui-textarea/ui-textarea.html +15 -1
  44. package/components/ui-toast-region/ui-toast-region.html +16 -2
  45. package/components/ui-tooltip/ui-tooltip.html +62 -13
  46. package/components/ui-top-bar/ui-top-bar.html +34 -1
  47. package/components/ui-tree/ui-tree.html +27 -4
  48. package/components/ui-tree-item/ui-tree-item.html +39 -10
  49. package/components/ui-tree-item/ui-tree-item.js +1 -1
  50. package/dist/index.js +1 -1
  51. package/package.json +1 -1
  52. package/styles/ui-action-bar.css +14 -3
  53. package/styles/ui-avatar-group.css +20 -4
  54. package/styles/ui-avatar.css +22 -2
  55. package/styles/ui-badge.css +46 -2
  56. package/styles/ui-button.css +74 -2
  57. package/styles/ui-callout.css +59 -6
  58. package/styles/ui-checkbox.css +20 -5
  59. package/styles/ui-cluster.css +10 -2
  60. package/styles/ui-combobox.css +69 -14
  61. package/styles/ui-container.css +14 -2
  62. package/styles/ui-context-menu.css +14 -3
  63. package/styles/ui-dialog.css +25 -6
  64. package/styles/ui-disclosure.css +27 -6
  65. package/styles/ui-editable.css +1 -1
  66. package/styles/ui-editor-slash-menu.css +2 -2
  67. package/styles/ui-editor-table-context-menu.css +2 -2
  68. package/styles/ui-editor-table-overlay.css +8 -8
  69. package/styles/ui-editor-table-toolbar.css +3 -3
  70. package/styles/ui-floating-action-button.css +18 -2
  71. package/styles/ui-form-field.css +14 -3
  72. package/styles/ui-grid.css +14 -2
  73. package/styles/ui-icon-button.css +85 -5
  74. package/styles/ui-icon.css +21 -5
  75. package/styles/ui-input-group.css +14 -13
  76. package/styles/ui-input.css +73 -15
  77. package/styles/ui-list-item.css +26 -3
  78. package/styles/ui-list.css +14 -2
  79. package/styles/ui-menu-item.css +34 -5
  80. package/styles/ui-menu.css +21 -6
  81. package/styles/ui-nav-item.css +18 -2
  82. package/styles/ui-popover.css +10 -2
  83. package/styles/ui-radio.css +20 -5
  84. package/styles/ui-reel.css +18 -3
  85. package/styles/ui-search-result-row.css +38 -2
  86. package/styles/ui-search-shell.css +69 -13
  87. package/styles/ui-select.css +19 -3
  88. package/styles/ui-separator.css +14 -2
  89. package/styles/ui-sidebar.css +26 -3
  90. package/styles/ui-stack.css +10 -2
  91. package/styles/ui-switch.css +25 -5
  92. package/styles/ui-switcher.css +21 -6
  93. package/styles/ui-tabs.css +25 -4
  94. package/styles/ui-textarea.css +19 -3
  95. package/styles/ui-toast-region.css +20 -4
  96. package/styles/ui-tooltip.css +66 -15
  97. package/styles/ui-top-bar.css +38 -3
  98. package/styles/ui-tree-item.css +43 -12
  99. package/styles/ui-tree.css +33 -6
  100. package/theme-dark.css +1 -1
  101. package/theme-light.css +1 -1
  102. package/tokens.css +8 -6
  103. package/vue/UiActionBar.vue +12 -3
  104. package/vue/UiAvatar.vue +18 -0
  105. package/vue/UiAvatarGroup.vue +16 -2
  106. package/vue/UiBadge.vue +42 -0
  107. package/vue/UiButton.vue +70 -0
  108. package/vue/UiCallout.vue +55 -4
  109. package/vue/UiCheckbox.vue +16 -3
  110. package/vue/UiCluster.vue +6 -0
  111. package/vue/UiCombobox.vue +66 -12
  112. package/vue/UiContainer.vue +10 -0
  113. package/vue/UiContextMenu.vue +10 -1
  114. package/vue/UiDialog.vue +21 -4
  115. package/vue/UiDisclosure.vue +23 -4
  116. package/vue/UiEditable.vue +1 -1
  117. package/vue/UiEditorSlashMenu.vue +2 -2
  118. package/vue/UiEditorTableContextMenu.vue +2 -2
  119. package/vue/UiEditorTableOverlay.vue +8 -8
  120. package/vue/UiEditorTableToolbar.vue +3 -3
  121. package/vue/UiFloatingActionButton.vue +14 -0
  122. package/vue/UiFormField.vue +10 -1
  123. package/vue/UiGrid.vue +10 -0
  124. package/vue/UiIcon.vue +17 -3
  125. package/vue/UiIconButton.vue +81 -3
  126. package/vue/UiInput.vue +90 -15
  127. package/vue/UiInputGroup.vue +14 -13
  128. package/vue/UiList.vue +12 -2
  129. package/vue/UiListItem.vue +30 -9
  130. package/vue/UiMenu.vue +17 -5
  131. package/vue/UiMenuItem.vue +42 -4
  132. package/vue/UiNavItem.vue +17 -3
  133. package/vue/UiPopover.vue +6 -0
  134. package/vue/UiRadio.vue +16 -3
  135. package/vue/UiReel.vue +14 -1
  136. package/vue/UiSearchResultRow.vue +34 -0
  137. package/vue/UiSearchShell.vue +66 -12
  138. package/vue/UiSelect.vue +15 -1
  139. package/vue/UiSeparator.vue +9 -2
  140. package/vue/UiSidebar.vue +22 -1
  141. package/vue/UiStack.vue +6 -0
  142. package/vue/UiSwitch.vue +21 -3
  143. package/vue/UiSwitcher.vue +17 -4
  144. package/vue/UiTabs.vue +22 -3
  145. package/vue/UiTextarea.vue +15 -1
  146. package/vue/UiToastRegion.vue +16 -2
  147. package/vue/UiTooltip.vue +62 -13
  148. package/vue/UiTopBar.vue +34 -1
  149. package/vue/UiTree.vue +28 -5
  150. package/vue/UiTreeItem.vue +46 -11
  151. package/vue/chunks/UiActionBar.js +1 -1
  152. package/vue/chunks/UiAvatar.js +1 -1
  153. package/vue/chunks/UiAvatarGroup.js +1 -1
  154. package/vue/chunks/UiBadge.js +1 -1
  155. package/vue/chunks/UiButton.js +1 -1
  156. package/vue/chunks/UiCallout.js +1 -1
  157. package/vue/chunks/UiCheckbox.js +1 -1
  158. package/vue/chunks/UiCluster.js +1 -1
  159. package/vue/chunks/UiCombobox.js +1 -1
  160. package/vue/chunks/UiContainer.js +1 -1
  161. package/vue/chunks/UiContextMenu.js +1 -1
  162. package/vue/chunks/UiDialog.js +1 -1
  163. package/vue/chunks/UiDisclosure.js +1 -1
  164. package/vue/chunks/UiEditable.js +1 -1
  165. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  166. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  167. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  168. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  169. package/vue/chunks/UiFloatingActionButton.js +1 -1
  170. package/vue/chunks/UiFormField.js +1 -1
  171. package/vue/chunks/UiGrid.js +1 -1
  172. package/vue/chunks/UiIcon.js +1 -1
  173. package/vue/chunks/UiIconButton.js +1 -1
  174. package/vue/chunks/UiInput.js +1 -1
  175. package/vue/chunks/UiInputGroup.js +1 -1
  176. package/vue/chunks/UiList.js +1 -1
  177. package/vue/chunks/UiListItem.js +1 -1
  178. package/vue/chunks/UiMenu.js +1 -1
  179. package/vue/chunks/UiMenuItem.js +1 -1
  180. package/vue/chunks/UiNavItem.js +1 -1
  181. package/vue/chunks/UiPopover.js +1 -1
  182. package/vue/chunks/UiRadio.js +1 -1
  183. package/vue/chunks/UiReel.js +1 -1
  184. package/vue/chunks/UiSearchResultRow.js +1 -1
  185. package/vue/chunks/UiSearchShell.js +1 -1
  186. package/vue/chunks/UiSelect.js +1 -1
  187. package/vue/chunks/UiSeparator.js +1 -1
  188. package/vue/chunks/UiSidebar.js +1 -1
  189. package/vue/chunks/UiStack.js +1 -1
  190. package/vue/chunks/UiSwitch.js +1 -1
  191. package/vue/chunks/UiSwitcher.js +1 -1
  192. package/vue/chunks/UiTabs.js +1 -1
  193. package/vue/chunks/UiTextarea.js +1 -1
  194. package/vue/chunks/UiToastRegion.js +1 -1
  195. package/vue/chunks/UiTooltip.js +1 -1
  196. package/vue/chunks/UiTopBar.js +1 -1
  197. package/vue/chunks/UiTree.js +1 -1
  198. package/vue/chunks/UiTreeItem.js +1 -1
  199. package/vue/components.css +1959 -927
@@ -1,4 +1,16 @@
1
1
  /* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
2
+ @property --ui-dialog-duration {
3
+ syntax: "*";
4
+ inherits: false;
5
+ }
6
+ @property --ui-dialog-max-width {
7
+ syntax: "*";
8
+ inherits: false;
9
+ }
10
+ @property --ui-dialog-viewport-gap {
11
+ syntax: "*";
12
+ inherits: false;
13
+ }
2
14
  @keyframes ui-dialog-enter {
3
15
  from {
4
16
  opacity: 0;
@@ -11,7 +23,12 @@
11
23
  }
12
24
  }
13
25
  @scope ([data-component~="ui-dialog"]) to ([data-component], [data-slotted]) {
14
- :scope {
26
+ /* This component's hooks style the element they are set on, and never a nested one. */
27
+
28
+ :scope {
29
+ /* Hooks do not inherit, so the parts below read them from the root. */
30
+ --_ui-dialog-duration: var(--ui-dialog-duration);
31
+
15
32
  position: fixed;
16
33
  inset: 0;
17
34
  box-sizing: border-box;
@@ -171,18 +188,20 @@
171
188
  :scope::backdrop {
172
189
  background-color: transparent;
173
190
  transition:
174
- background-color var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease),
175
- display var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete,
176
- overlay var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete;
191
+ background-color var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease),
192
+ display var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete,
193
+ overlay var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete;
177
194
  }
178
195
 
179
196
  :scope[open]::backdrop {
180
197
  background-color: var(--ui-overlay-backdrop);
181
- animation: ui-dialog-backdrop-enter var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease);
198
+ animation: ui-dialog-backdrop-enter var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease);
182
199
  }
183
200
  }
184
201
  @scope ([data-component~="ui-dialog"]) to ([data-component]) {
185
- /* Header and actions stay pinned; only the body scrolls when content is long. */
202
+ /* This component's hooks style the element they are set on, and never a nested one. */
203
+
204
+ /* Header and actions stay pinned; only the body scrolls when content is long. */
186
205
 
187
206
  /* :host-qualified so page heading rules that reach in cannot outrank the dialog chrome. */
188
207
 
@@ -1,7 +1,26 @@
1
1
  /* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
2
+ @property --ui-disclosure-trigger-min-block-size {
3
+ syntax: "*";
4
+ inherits: false;
5
+ }
6
+ @property --ui-disclosure-trigger-padding-block {
7
+ syntax: "*";
8
+ inherits: false;
9
+ }
10
+ @property --ui-disclosure-trigger-padding-inline {
11
+ syntax: "*";
12
+ inherits: false;
13
+ }
2
14
  @scope ([data-component~="ui-disclosure"]) to ([data-component], [data-slotted]) {
3
- /* Density resolves into the summary row's own values; the public tokens still override them. */
15
+ /* This component's hooks style the element they are set on, and never a nested one. */
16
+
17
+ /* Density resolves into the summary row's own values; the public tokens still override them. */
4
18
  :scope {
19
+ /* Hooks do not inherit, so the parts below read them from the root. */
20
+ --_ui-disclosure-trigger-min-block-size: var(--ui-disclosure-trigger-min-block-size);
21
+ --_ui-disclosure-trigger-padding-block: var(--ui-disclosure-trigger-padding-block);
22
+ --_ui-disclosure-trigger-padding-inline: var(--ui-disclosure-trigger-padding-inline);
23
+
5
24
  --_trigger-min-block-size: var(--ui-control-size);
6
25
  --_trigger-padding-block: var(--ui-space-2);
7
26
  --_trigger-padding-inline: var(--ui-space-3);
@@ -29,9 +48,9 @@
29
48
  gap: var(--ui-space-3);
30
49
  align-items: center;
31
50
  inline-size: 100%;
32
- min-block-size: var(--ui-disclosure-trigger-min-block-size, var(--_trigger-min-block-size));
33
- padding: var(--ui-disclosure-trigger-padding-block, var(--_trigger-padding-block))
34
- var(--ui-disclosure-trigger-padding-inline, var(--_trigger-padding-inline));
51
+ min-block-size: var(--_ui-disclosure-trigger-min-block-size, var(--_trigger-min-block-size));
52
+ padding: var(--_ui-disclosure-trigger-padding-block, var(--_trigger-padding-block))
53
+ var(--_ui-disclosure-trigger-padding-inline, var(--_trigger-padding-inline));
35
54
  border: 0;
36
55
  background: transparent;
37
56
  color: inherit;
@@ -51,7 +70,7 @@
51
70
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
52
71
  }
53
72
  .trigger:disabled {
54
- color: var(--ui-text-muted);
73
+ color: var(--ui-disabled-text);
55
74
  cursor: not-allowed;
56
75
  }
57
76
 
@@ -99,7 +118,9 @@
99
118
  }
100
119
  }
101
120
  @scope ([data-component~="ui-disclosure"]) to ([data-component]) {
102
- /* Density resolves into the summary row's own values; the public tokens still override them. */
121
+ /* This component's hooks style the element they are set on, and never a nested one. */
122
+
123
+ /* Density resolves into the summary row's own values; the public tokens still override them. */
103
124
 
104
125
  /* An accordion row, not a field: no enclosing box, just a divider, so it never reads as a
105
126
  * select or combobox. Stacked disclosures share their dividers. */
@@ -120,7 +120,7 @@
120
120
  }
121
121
 
122
122
  :scope[data-ui-editable-state~="disabled"] .preview {
123
- color: var(--ui-text-muted);
123
+ color: var(--ui-disabled-text);
124
124
  cursor: not-allowed;
125
125
  }
126
126
 
@@ -122,8 +122,8 @@
122
122
  }
123
123
 
124
124
  .icon {
125
- --ui-icon-size: 1rem;
126
- --ui-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
125
+ --_ui-default-icon-size: 1rem;
126
+ --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
127
127
  }
128
128
 
129
129
  .body {
@@ -42,8 +42,8 @@
42
42
  }
43
43
 
44
44
  :scope button {
45
- --ui-icon-size: 1rem;
46
- --ui-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
45
+ --_ui-default-icon-size: 1rem;
46
+ --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
47
47
  }
48
48
 
49
49
  :scope button:hover:not(:disabled) {
@@ -67,8 +67,8 @@
67
67
  }
68
68
 
69
69
  .handle {
70
- --ui-icon-size: 14px;
71
- --ui-icon-stroke-width: 2;
70
+ --_ui-default-icon-size: 14px;
71
+ --_ui-default-icon-stroke-width: 2;
72
72
  }
73
73
 
74
74
  .handle[data-ui-proximity="near"],
@@ -216,8 +216,8 @@
216
216
 
217
217
  .selector:hover,
218
218
  .cell-menu:hover {
219
- background: var(--ui-icon-button-hover-surface, var(--ui-surface-muted));
220
- color: var(--ui-icon-button-hover-text, var(--ui-text-primary));
219
+ background: var(--ui-surface-muted);
220
+ color: var(--ui-text-primary);
221
221
  box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
222
222
  }
223
223
 
@@ -241,8 +241,8 @@
241
241
  display: block;
242
242
  width: 14px;
243
243
  height: 14px;
244
- --ui-icon-size: 14px;
245
- --ui-icon-stroke-width: 2;
244
+ --_ui-default-icon-size: 14px;
245
+ --_ui-default-icon-stroke-width: 2;
246
246
  opacity: 0;
247
247
  transform: scale(0.72);
248
248
  transition:
@@ -304,8 +304,8 @@
304
304
  }
305
305
 
306
306
  .cell-menu {
307
- --ui-icon-size: 15px;
308
- --ui-icon-stroke-width: 2;
307
+ --_ui-default-icon-size: 15px;
308
+ --_ui-default-icon-stroke-width: 2;
309
309
  }
310
310
 
311
311
  :scope[hidden] {
@@ -103,13 +103,13 @@
103
103
  }
104
104
 
105
105
  :scope {
106
- --ui-icon-size: var(--ui-editor-toolbar-icon-size, 1rem);
107
- --ui-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
106
+ --_ui-default-icon-size: var(--ui-editor-toolbar-icon-size, 1rem);
107
+ --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
108
108
  }
109
109
 
110
110
  .chevron {
111
111
  display: inline-flex;
112
- --ui-icon-size: 0.875rem;
112
+ --_ui-default-icon-size: 0.875rem;
113
113
  }
114
114
 
115
115
  :scope .icon-button {
@@ -1,6 +1,20 @@
1
1
  /* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
2
+ @property --ui-floating-action-button-inset-block-end {
3
+ syntax: "*";
4
+ inherits: false;
5
+ }
6
+ @property --ui-floating-action-button-inset-inline-end {
7
+ syntax: "*";
8
+ inherits: false;
9
+ }
10
+ @property --ui-floating-action-button-z-index {
11
+ syntax: "*";
12
+ inherits: false;
13
+ }
2
14
  @scope ([data-component~="ui-floating-action-button"]) to ([data-component], [data-slotted]) {
3
- :scope {
15
+ /* This component's hooks style the element they are set on, and never a nested one. */
16
+
17
+ :scope {
4
18
  position: fixed;
5
19
  inset-block-end: calc(var(--ui-floating-action-button-inset-block-end, var(--ui-space-6)) + env(safe-area-inset-bottom));
6
20
  inset-inline-end: max(
@@ -63,7 +77,9 @@
63
77
  }
64
78
  }
65
79
  @scope ([data-component~="ui-floating-action-button"]) to ([data-component]) {
66
- :where([data-slotted], [data-slotted] *):is(svg) {
80
+ /* This component's hooks style the element they are set on, and never a nested one. */
81
+
82
+ :where([data-slotted], [data-slotted] *):is(svg) {
67
83
  inline-size: var(--ui-icon-size-lg);
68
84
  block-size: var(--ui-icon-size-lg);
69
85
  flex-shrink: 0;
@@ -1,6 +1,15 @@
1
1
  /* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
2
+ @property --ui-form-field-help-min-block-size {
3
+ syntax: "*";
4
+ inherits: false;
5
+ }
2
6
  @scope ([data-component~="ui-form-field"]) to ([data-component], [data-slotted]) {
3
- :scope {
7
+ /* This component's hooks style the element they are set on, and never a nested one. */
8
+
9
+ :scope {
10
+ /* Hooks do not inherit, so the parts below read them from the root. */
11
+ --_ui-form-field-help-min-block-size: var(--ui-form-field-help-min-block-size);
12
+
4
13
  display: grid;
5
14
  gap: var(--ui-space-2);
6
15
  min-inline-size: 0;
@@ -35,11 +44,13 @@
35
44
  }
36
45
  }
37
46
  @scope ([data-component~="ui-form-field"]) to ([data-component]) {
38
- /* Each named region styles whatever fills it, however it was slotted (slot="…" in HTML, #label
47
+ /* This component's hooks style the element they are set on, and never a nested one. */
48
+
49
+ /* Each named region styles whatever fills it, however it was slotted (slot="…" in HTML, #label
39
50
  in Vue), and generates no box of its own, so an empty region adds no gap. */
40
51
 
41
52
  .help > :where([data-slotted], [data-slotted] *):is(*) {
42
- min-block-size: var(--ui-form-field-help-min-block-size, 0);
53
+ min-block-size: var(--_ui-form-field-help-min-block-size, 0);
43
54
  }
44
55
 
45
56
  /* An error reads in the danger colour, the one the invalid control's border takes. */
@@ -1,6 +1,16 @@
1
1
  /* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
2
+ @property --ui-grid-gap {
3
+ syntax: "*";
4
+ inherits: false;
5
+ }
6
+ @property --ui-grid-min {
7
+ syntax: "*";
8
+ inherits: false;
9
+ }
2
10
  @scope ([data-component~="ui-grid"]) to ([data-component], [data-slotted]) {
3
- :scope {
11
+ /* This component's hooks style the element they are set on, and never a nested one. */
12
+
13
+ :scope {
4
14
  --_grid-gap: var(--ui-space-4);
5
15
  --_grid-min: 12rem;
6
16
  display: grid;
@@ -39,5 +49,7 @@
39
49
  }
40
50
  }
41
51
  @scope ([data-component~="ui-grid"]) to ([data-component]) {
42
- /* A component that sets its display still honours the hidden attribute on its root. */
52
+ /* This component's hooks style the element they are set on, and never a nested one. */
53
+
54
+ /* A component that sets its display still honours the hidden attribute on its root. */
43
55
  }
@@ -1,6 +1,84 @@
1
1
  /* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
2
+ @property --ui-icon-button-active-scale {
3
+ syntax: "*";
4
+ inherits: false;
5
+ }
6
+ @property --ui-icon-button-border {
7
+ syntax: "*";
8
+ inherits: false;
9
+ }
10
+ @property --ui-icon-button-disabled-filter {
11
+ syntax: "*";
12
+ inherits: false;
13
+ }
14
+ @property --ui-icon-button-disabled-opacity {
15
+ syntax: "*";
16
+ inherits: false;
17
+ }
18
+ @property --ui-icon-button-hover-border {
19
+ syntax: "*";
20
+ inherits: false;
21
+ }
22
+ @property --ui-icon-button-hover-surface {
23
+ syntax: "*";
24
+ inherits: false;
25
+ }
26
+ @property --ui-icon-button-hover-text {
27
+ syntax: "*";
28
+ inherits: false;
29
+ }
30
+ @property --ui-icon-button-icon-size {
31
+ syntax: "*";
32
+ inherits: false;
33
+ }
34
+ @property --ui-icon-button-icon-stroke-width {
35
+ syntax: "*";
36
+ inherits: false;
37
+ }
38
+ @property --ui-icon-button-outline-surface {
39
+ syntax: "*";
40
+ inherits: false;
41
+ }
42
+ @property --ui-icon-button-outline-text {
43
+ syntax: "*";
44
+ inherits: false;
45
+ }
46
+ @property --ui-icon-button-radius {
47
+ syntax: "*";
48
+ inherits: false;
49
+ }
50
+ @property --ui-icon-button-size {
51
+ syntax: "*";
52
+ inherits: false;
53
+ }
54
+ @property --ui-icon-button-solid-hover-surface {
55
+ syntax: "*";
56
+ inherits: false;
57
+ }
58
+ @property --ui-icon-button-solid-shadow {
59
+ syntax: "*";
60
+ inherits: false;
61
+ }
62
+ @property --ui-icon-button-solid-surface {
63
+ syntax: "*";
64
+ inherits: false;
65
+ }
66
+ @property --ui-icon-button-solid-text {
67
+ syntax: "*";
68
+ inherits: false;
69
+ }
70
+ @property --ui-icon-button-surface {
71
+ syntax: "*";
72
+ inherits: false;
73
+ }
2
74
  @scope ([data-component~="ui-icon-button"]) to ([data-component], [data-slotted]) {
3
- :scope {
75
+ /* This component's hooks style the element they are set on, and never a nested one. */
76
+
77
+ :scope {
78
+ /* Hooks do not inherit, so the parts below read them from the root. */
79
+ --_ui-icon-button-icon-size: var(--ui-icon-button-icon-size);
80
+ --_ui-icon-button-icon-stroke-width: var(--ui-icon-button-icon-stroke-width);
81
+
4
82
  display: inline-flex;
5
83
  color: var(--ui-text-secondary);
6
84
  }
@@ -187,7 +265,9 @@
187
265
  }
188
266
  }
189
267
  @scope ([data-component~="ui-icon-button"]) to ([data-component]) {
190
- /* At rest an anticipatory button shows only its guide dot; proximity, hover, or focus reveals the
268
+ /* This component's hooks style the element they are set on, and never a nested one. */
269
+
270
+ /* At rest an anticipatory button shows only its guide dot; proximity, hover, or focus reveals the
191
271
  * surface and icon. The root is the native button, so hiding it outright would hide the dot
192
272
  * too, and slotted icons sit outside this scope; `color: transparent` hides currentColor icons. */
193
273
  @media (hover: hover) and (pointer: fine) {
@@ -205,10 +285,10 @@
205
285
  /* Disabled washes the button out the way Button does: the same shape, one filter. */
206
286
 
207
287
  :where([data-slotted], [data-slotted] *):is(svg) {
208
- inline-size: var(--ui-icon-button-icon-size, var(--_icon-button-icon-default));
209
- block-size: var(--ui-icon-button-icon-size, var(--_icon-button-icon-default));
288
+ inline-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
289
+ block-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
210
290
  flex-shrink: 0;
211
- stroke-width: var(--ui-icon-button-icon-stroke-width, 1.75);
291
+ stroke-width: var(--_ui-icon-button-icon-stroke-width, 1.75);
212
292
  }
213
293
 
214
294
  /* A component that sets its display still honours the hidden attribute on its root. */
@@ -1,16 +1,30 @@
1
1
  /* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
2
+ @property --ui-icon-size {
3
+ syntax: "*";
4
+ inherits: false;
5
+ }
6
+ @property --ui-icon-stroke-width {
7
+ syntax: "*";
8
+ inherits: false;
9
+ }
2
10
  @scope ([data-component~="ui-icon"]) to ([data-component], [data-slotted]) {
3
- :scope {
11
+ /* This component's hooks style the element they are set on, and never a nested one. */
12
+
13
+ :scope {
14
+ /* Hooks do not inherit, so the svg reads the stroke from the root. A Looma component that
15
+ sizes the icons it renders sets --_ui-default-icon-*, which the icon's own hooks override. */
16
+ --_ui-icon-stroke-width: var(--ui-icon-stroke-width, var(--_ui-default-icon-stroke-width));
17
+
4
18
  display: inline-flex;
5
19
  flex: none;
6
- inline-size: var(--ui-icon-size, 1em);
7
- block-size: var(--ui-icon-size, 1em);
20
+ inline-size: var(--ui-icon-size, var(--_ui-default-icon-size, 1em));
21
+ block-size: var(--ui-icon-size, var(--_ui-default-icon-size, 1em));
8
22
  }
9
23
 
10
24
  svg {
11
25
  inline-size: 100%;
12
26
  block-size: 100%;
13
- stroke-width: var(--ui-icon-stroke-width, 2);
27
+ stroke-width: var(--_ui-icon-stroke-width, 2);
14
28
  }
15
29
 
16
30
  /* A component that sets its display still honours the hidden attribute on its root. */
@@ -19,5 +33,7 @@
19
33
  }
20
34
  }
21
35
  @scope ([data-component~="ui-icon"]) to ([data-component]) {
22
- /* A component that sets its display still honours the hidden attribute on its root. */
36
+ /* This component's hooks style the element they are set on, and never a nested one. */
37
+
38
+ /* A component that sets its display still honours the hidden attribute on its root. */
23
39
  }
@@ -9,19 +9,20 @@
9
9
  thing the field is for ("Continue" after a site's address), so it reads as the field's action
10
10
  and not the form's. */
11
11
  :scope {
12
- /* The group's own border and height stand for the input's, so the group is a lone Input's height. */
13
- --ui-input-border-width: 0;
14
- --ui-input-min-block-size: 0;
15
- --ui-input-border: transparent;
16
- --ui-input-border-hover: transparent;
17
- --ui-input-focus-border: transparent;
18
- --ui-input-invalid-border: transparent;
19
- --ui-input-invalid-focus-shadow: none;
20
- --ui-input-shadow: none;
21
- --ui-input-focus-shadow: none;
22
- --ui-input-focus-outline: none;
23
- --ui-input-radius: 0;
24
- --ui-input-surface: transparent;
12
+ /* The group's own border and height stand for the input's, so the group is a lone Input's height.
13
+ Hooks do not inherit, so these are defaults for the input; its own hooks still win. */
14
+ --_ui-default-input-border-width: 0;
15
+ --_ui-default-input-min-block-size: 0;
16
+ --_ui-default-input-border: transparent;
17
+ --_ui-default-input-border-hover: transparent;
18
+ --_ui-default-input-focus-border: transparent;
19
+ --_ui-default-input-invalid-border: transparent;
20
+ --_ui-default-input-invalid-focus-shadow: none;
21
+ --_ui-default-input-shadow: none;
22
+ --_ui-default-input-focus-shadow: none;
23
+ --_ui-default-input-focus-outline: none;
24
+ --_ui-default-input-radius: 0;
25
+ --_ui-default-input-surface: transparent;
25
26
 
26
27
  display: flex;
27
28
  align-items: stretch;
@@ -1,21 +1,73 @@
1
1
  /* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
2
+ @property --ui-input-border {
3
+ syntax: "*";
4
+ inherits: false;
5
+ }
6
+ @property --ui-input-border-hover {
7
+ syntax: "*";
8
+ inherits: false;
9
+ }
10
+ @property --ui-input-border-width {
11
+ syntax: "*";
12
+ inherits: false;
13
+ }
14
+ @property --ui-input-focus-border {
15
+ syntax: "*";
16
+ inherits: false;
17
+ }
18
+ @property --ui-input-focus-outline {
19
+ syntax: "*";
20
+ inherits: false;
21
+ }
22
+ @property --ui-input-focus-shadow {
23
+ syntax: "*";
24
+ inherits: false;
25
+ }
26
+ @property --ui-input-invalid-border {
27
+ syntax: "*";
28
+ inherits: false;
29
+ }
30
+ @property --ui-input-invalid-focus-shadow {
31
+ syntax: "*";
32
+ inherits: false;
33
+ }
34
+ @property --ui-input-min-block-size {
35
+ syntax: "*";
36
+ inherits: false;
37
+ }
38
+ @property --ui-input-radius {
39
+ syntax: "*";
40
+ inherits: false;
41
+ }
42
+ @property --ui-input-shadow {
43
+ syntax: "*";
44
+ inherits: false;
45
+ }
46
+ @property --ui-input-surface {
47
+ syntax: "*";
48
+ inherits: false;
49
+ }
2
50
  @scope ([data-component~="ui-input"]) to ([data-component], [data-slotted]) {
3
- :scope {
51
+ /* This component's hooks style the element they are set on, and never a nested one. An Input
52
+ Group sets --_ui-default-input-* for the input inside it, below the input's own hooks. */
53
+
54
+ :scope {
4
55
  box-sizing: border-box;
5
56
  display: inline-block;
6
57
  inline-size: 100%;
7
58
  min-inline-size: 0;
8
- min-block-size: var(--ui-input-min-block-size, var(--ui-control-size-md));
59
+ min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-md)));
9
60
  margin: 0;
10
61
  padding: var(--ui-space-2) var(--ui-space-3);
11
62
  appearance: none;
12
- border: var(--ui-input-border-width, 1px) solid var(--ui-input-border, var(--ui-control-border, var(--ui-border-strong)));
13
- border-radius: var(--ui-input-radius, var(--ui-radius-md));
14
- background: var(--ui-input-surface, var(--ui-control-surface, var(--ui-surface-elevated)));
63
+ border: var(--ui-input-border-width, var(--_ui-default-input-border-width, 1px)) solid
64
+ var(--ui-input-border, var(--_ui-default-input-border, var(--ui-control-border, var(--ui-border-strong))));
65
+ border-radius: var(--ui-input-radius, var(--_ui-default-input-radius, var(--ui-radius-md)));
66
+ background: var(--ui-input-surface, var(--_ui-default-input-surface, var(--ui-control-surface, var(--ui-surface-elevated))));
15
67
  color: var(--ui-text-primary);
16
68
  font: inherit;
17
69
  line-height: var(--ui-line-height-md);
18
- box-shadow: var(--ui-input-shadow, var(--ui-control-inset));
70
+ box-shadow: var(--ui-input-shadow, var(--_ui-default-input-shadow, var(--ui-control-inset)));
19
71
  transition:
20
72
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
21
73
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
@@ -34,32 +86,35 @@
34
86
  }
35
87
 
36
88
  :scope:hover:not(:focus):not(:disabled) {
37
- border-color: var(--ui-input-border-hover, var(--ui-control-border-hover, var(--ui-text-secondary)));
89
+ border-color: var(--ui-input-border-hover, var(--_ui-default-input-border-hover, var(--ui-control-border-hover, var(--ui-text-secondary))));
38
90
  }
39
91
 
40
92
  :scope:focus-visible {
41
- border-color: var(--ui-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid)));
93
+ border-color: var(--ui-input-focus-border, var(--_ui-default-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid))));
42
94
  outline: none;
43
- box-shadow: var(--ui-input-focus-shadow, var(--ui-control-inset), var(--ui-control-focus-halo-shadow));
95
+ box-shadow: var(--ui-input-focus-shadow, var(--_ui-default-input-focus-shadow, var(--ui-control-inset), var(--ui-control-focus-halo-shadow)));
44
96
  }
45
97
 
46
98
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
47
99
  :scope[aria-invalid="true"],
48
100
  :scope:is(:user-invalid, [data-user-invalid]) {
49
- border-color: var(--ui-input-invalid-border, var(--ui-danger-solid));
101
+ border-color: var(--ui-input-invalid-border, var(--_ui-default-input-invalid-border, var(--ui-danger-solid)));
50
102
  }
51
103
 
52
104
  :scope:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
53
105
  box-shadow: var(
54
106
  --ui-input-invalid-focus-shadow,
55
- var(--ui-control-inset),
56
- 0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent)
107
+ var(
108
+ --_ui-default-input-invalid-focus-shadow,
109
+ var(--ui-control-inset),
110
+ 0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent)
111
+ )
57
112
  );
58
113
  }
59
114
 
60
115
  :scope:disabled {
61
116
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
62
- color: var(--ui-text-muted);
117
+ color: var(--ui-disabled-text);
63
118
  box-shadow: none;
64
119
  cursor: not-allowed;
65
120
  }
@@ -67,7 +122,7 @@
67
122
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
68
123
  @media (forced-colors: active) {
69
124
  :scope:focus-visible {
70
- outline: var(--ui-input-focus-outline, 2px solid Highlight);
125
+ outline: var(--ui-input-focus-outline, var(--_ui-default-input-focus-outline, 2px solid Highlight));
71
126
  outline-offset: 1px;
72
127
  }
73
128
  }
@@ -81,7 +136,10 @@
81
136
  }
82
137
  }
83
138
  @scope ([data-component~="ui-input"]) to ([data-component]) {
84
- /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
139
+ /* This component's hooks style the element they are set on, and never a nested one. An Input
140
+ Group sets --_ui-default-input-* for the input inside it, below the input's own hooks. */
141
+
142
+ /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
85
143
 
86
144
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
87
145