@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
@@ -2,7 +2,7 @@
2
2
  <defs>
3
3
  <prop name="gap" type="xs | s | m | l | xl"
4
4
  >Space between items, on the spacing scale: xs is 0.5rem, s 0.75rem, m 1rem (also the default), l 1.5rem, and xl 2rem. The --ui-reel-gap custom property,
5
- when set, overrides it.</prop>
5
+ set on the reel itself, overrides it; set on an ancestor, it does nothing.</prop>
6
6
  <prop name="itemWidth" type="sm | md | lg"
7
7
  >A fixed width for every item: sm is 12rem, md is 16rem, and lg is 20rem. Unset, each item keeps its content's width. Items never shrink to fit, so the reel
8
8
  scrolls sideways once they overflow.</prop>
@@ -12,7 +12,20 @@
12
12
  </defs>
13
13
  <div role="region" tabindex="0"><slot></slot></div>
14
14
  <style>
15
+ /* This component's hooks style the element they are set on, and never a nested one. */
16
+ @property --ui-reel-gap {
17
+ syntax: "*";
18
+ inherits: false;
19
+ }
20
+ @property --ui-reel-item-width {
21
+ syntax: "*";
22
+ inherits: false;
23
+ }
24
+
15
25
  :host {
26
+ /* Hooks do not inherit, so the parts below read them from the root. */
27
+ --_ui-reel-item-width: var(--ui-reel-item-width);
28
+
16
29
  --_reel-gap: var(--ui-space-4);
17
30
  --_reel-item-width: auto;
18
31
  display: flex;
@@ -52,7 +65,7 @@
52
65
 
53
66
  :host > :slotted(*) {
54
67
  min-inline-size: 0;
55
- flex: 0 0 var(--ui-reel-item-width, var(--_reel-item-width));
68
+ flex: 0 0 var(--_ui-reel-item-width, var(--_reel-item-width));
56
69
  }
57
70
 
58
71
  :host-state([gap="xs"]) {
@@ -15,6 +15,40 @@
15
15
  <span class="trailing"><slot name="trailing"></slot></span>
16
16
  </button>
17
17
  <style>
18
+ /* This component's hooks style the element they are set on, and never a nested one. */
19
+ @property --ui-search-result-row-border {
20
+ syntax: "*";
21
+ inherits: false;
22
+ }
23
+ @property --ui-search-result-row-gap {
24
+ syntax: "*";
25
+ inherits: false;
26
+ }
27
+ @property --ui-search-result-row-hover-surface {
28
+ syntax: "*";
29
+ inherits: false;
30
+ }
31
+ @property --ui-search-result-row-min-height {
32
+ syntax: "*";
33
+ inherits: false;
34
+ }
35
+ @property --ui-search-result-row-padding-block {
36
+ syntax: "*";
37
+ inherits: false;
38
+ }
39
+ @property --ui-search-result-row-padding-inline {
40
+ syntax: "*";
41
+ inherits: false;
42
+ }
43
+ @property --ui-search-result-row-selected-bg {
44
+ syntax: "*";
45
+ inherits: false;
46
+ }
47
+ @property --ui-search-result-row-surface {
48
+ syntax: "*";
49
+ inherits: false;
50
+ }
51
+
18
52
  :host {
19
53
  appearance: none;
20
54
  inline-size: 100%;
@@ -21,22 +21,76 @@
21
21
  </dialog>
22
22
  </div>
23
23
  <style>
24
+ /* This component's hooks style the element they are set on, and never a nested one. */
25
+ @property --ui-search-shell-border {
26
+ syntax: "*";
27
+ inherits: false;
28
+ }
29
+ @property --ui-search-shell-focus-color {
30
+ syntax: "*";
31
+ inherits: false;
32
+ }
33
+ @property --ui-search-shell-max-height {
34
+ syntax: "*";
35
+ inherits: false;
36
+ }
37
+ @property --ui-search-shell-max-width {
38
+ syntax: "*";
39
+ inherits: false;
40
+ }
41
+ @property --ui-search-shell-padding-top {
42
+ syntax: "*";
43
+ inherits: false;
44
+ }
45
+ @property --ui-search-shell-radius {
46
+ syntax: "*";
47
+ inherits: false;
48
+ }
49
+ @property --ui-search-shell-shadow {
50
+ syntax: "*";
51
+ inherits: false;
52
+ }
53
+ @property --ui-search-shell-surface {
54
+ syntax: "*";
55
+ inherits: false;
56
+ }
57
+ @property --ui-search-shell-viewport-gap {
58
+ syntax: "*";
59
+ inherits: false;
60
+ }
61
+ @property --ui-search-shell-z-index {
62
+ syntax: "*";
63
+ inherits: false;
64
+ }
65
+
24
66
  :host {
67
+ /* Hooks do not inherit, so the parts below read them from the root. */
68
+ --_ui-search-shell-z-index: var(--ui-search-shell-z-index);
69
+ --_ui-search-shell-padding-top: var(--ui-search-shell-padding-top);
70
+ --_ui-search-shell-viewport-gap: var(--ui-search-shell-viewport-gap);
71
+ --_ui-search-shell-max-width: var(--ui-search-shell-max-width);
72
+ --_ui-search-shell-max-height: var(--ui-search-shell-max-height);
73
+ --_ui-search-shell-surface: var(--ui-search-shell-surface);
74
+ --_ui-search-shell-border: var(--ui-search-shell-border);
75
+ --_ui-search-shell-radius: var(--ui-search-shell-radius);
76
+ --_ui-search-shell-shadow: var(--ui-search-shell-shadow);
77
+ --_ui-search-shell-focus-color: var(--ui-search-shell-focus-color);
78
+
25
79
  display: contents;
26
80
  }
27
81
 
28
82
  dialog {
29
83
  position: fixed;
30
84
  inset: 0;
31
- z-index: var(--ui-search-shell-z-index, 400);
85
+ z-index: var(--_ui-search-shell-z-index, 400);
32
86
  box-sizing: border-box;
33
87
  inline-size: 100%;
34
88
  max-inline-size: none;
35
89
  block-size: 100%;
36
90
  max-block-size: none;
37
91
  margin: 0;
38
- padding: var(--ui-search-shell-padding-top, 10vh) var(--ui-search-shell-viewport-gap, var(--ui-space-4))
39
- var(--ui-search-shell-viewport-gap, var(--ui-space-4));
92
+ padding: var(--_ui-search-shell-padding-top, 10vh) var(--_ui-search-shell-viewport-gap, var(--ui-space-4))
93
+ var(--_ui-search-shell-viewport-gap, var(--ui-space-4));
40
94
  overflow: auto;
41
95
  border: 0;
42
96
  background: var(--ui-overlay-backdrop);
@@ -51,14 +105,14 @@
51
105
  position: relative;
52
106
  display: flex;
53
107
  flex-direction: column;
54
- inline-size: min(100%, var(--ui-search-shell-max-width, 40rem));
55
- max-block-size: var(--ui-search-shell-max-height, 80vh);
108
+ inline-size: min(100%, var(--_ui-search-shell-max-width, 40rem));
109
+ max-block-size: var(--_ui-search-shell-max-height, 80vh);
56
110
  margin-inline: auto;
57
111
  overflow: hidden;
58
- background: var(--ui-search-shell-surface, var(--ui-surface-elevated));
59
- border: 1px solid var(--ui-search-shell-border, var(--ui-border-default));
60
- border-radius: var(--ui-search-shell-radius, var(--ui-radius-dialog));
61
- box-shadow: var(--ui-search-shell-shadow, var(--ui-elevation-dialog, var(--ui-shadow-xl)));
112
+ background: var(--_ui-search-shell-surface, var(--ui-surface-elevated));
113
+ border: 1px solid var(--_ui-search-shell-border, var(--ui-border-default));
114
+ border-radius: var(--_ui-search-shell-radius, var(--ui-radius-dialog));
115
+ box-shadow: var(--_ui-search-shell-shadow, var(--ui-elevation-dialog, var(--ui-shadow-xl)));
62
116
  }
63
117
 
64
118
  .search {
@@ -69,8 +123,8 @@
69
123
 
70
124
  /* The search region shows where typing goes, whatever the author put in it. */
71
125
  .search:focus-within {
72
- border-block-end-color: var(--ui-search-shell-focus-color, var(--ui-control-focus));
73
- box-shadow: inset 0 -1px 0 var(--ui-search-shell-focus-color, var(--ui-control-focus));
126
+ border-block-end-color: var(--_ui-search-shell-focus-color, var(--ui-control-focus));
127
+ box-shadow: inset 0 -1px 0 var(--_ui-search-shell-focus-color, var(--ui-control-focus));
74
128
  }
75
129
 
76
130
  :slotted(input[slot="search"]) {
@@ -9,6 +9,20 @@
9
9
  </defs>
10
10
  <select :disabled="disabled" :required="required" :aria-invalid="invalid"><slot></slot></select>
11
11
  <style>
12
+ /* This component's hooks style the element they are set on, and never a nested one. */
13
+ @property --ui-select-focus-shadow {
14
+ syntax: "*";
15
+ inherits: false;
16
+ }
17
+ @property --ui-select-radius {
18
+ syntax: "*";
19
+ inherits: false;
20
+ }
21
+ @property --ui-select-shadow {
22
+ syntax: "*";
23
+ inherits: false;
24
+ }
25
+
12
26
  :host {
13
27
  box-sizing: border-box;
14
28
  display: inline-block;
@@ -69,7 +83,7 @@
69
83
 
70
84
  :host:disabled {
71
85
  background-color: var(--ui-control-surface-disabled, var(--ui-surface-muted));
72
- color: var(--ui-text-muted);
86
+ color: var(--ui-disabled-text);
73
87
  box-shadow: none;
74
88
  cursor: not-allowed;
75
89
  }
@@ -5,7 +5,14 @@
5
5
  </defs>
6
6
  <hr :aria-orientation="orientation">
7
7
  <style>
8
- hr {
8
+ /* This component's hooks style the element they are set on, and never a nested one. */
9
+ @property --ui-separator-color {
10
+ syntax: "*";
11
+ inherits: false;
12
+ }
13
+
14
+ /* The root is the hr, so the rules name :host; a bare hr matches only a descendant. */
15
+ :host {
9
16
  box-sizing: border-box;
10
17
  align-self: stretch;
11
18
  margin: 0;
@@ -13,7 +20,7 @@
13
20
  border-block-start: 1px solid var(--ui-separator-color, var(--ui-border-default));
14
21
  }
15
22
 
16
- hr[aria-orientation="vertical"] {
23
+ :host[aria-orientation="vertical"] {
17
24
  block-size: auto;
18
25
  border-block-start: 0;
19
26
  border-inline-start: 1px solid var(--ui-separator-color, var(--ui-border-default));
@@ -31,7 +31,28 @@
31
31
  </div>
32
32
  </aside>
33
33
  <style>
34
+ /* This component's hooks style the element they are set on, and never a nested one. */
35
+ @property --ui-sidebar-backdrop {
36
+ syntax: "*";
37
+ inherits: false;
38
+ }
39
+ @property --ui-sidebar-border {
40
+ syntax: "*";
41
+ inherits: false;
42
+ }
43
+ @property --ui-sidebar-surface {
44
+ syntax: "*";
45
+ inherits: false;
46
+ }
47
+ @property --ui-sidebar-width {
48
+ syntax: "*";
49
+ inherits: false;
50
+ }
51
+
34
52
  :host {
53
+ /* Hooks do not inherit, so the parts below read them from the root. */
54
+ --_ui-sidebar-backdrop: var(--ui-sidebar-backdrop);
55
+
35
56
  position: relative;
36
57
  box-sizing: border-box;
37
58
  display: flex;
@@ -184,7 +205,7 @@
184
205
  }
185
206
 
186
207
  :host[popover]::backdrop {
187
- background: var(--ui-sidebar-backdrop, rgb(0 0 0 / 0.32));
208
+ background: var(--_ui-sidebar-backdrop, rgb(0 0 0 / 0.32));
188
209
  }
189
210
 
190
211
  @media (prefers-reduced-motion: reduce) {
@@ -2,7 +2,7 @@
2
2
  <defs>
3
3
  <prop name="gap" type="xs | s | m | l | xl"
4
4
  >Space between items, on the spacing scale: xs is 0.5rem, s 0.75rem, m 1rem (also the default), l 1.5rem, and xl 2rem. The --ui-stack-gap custom property,
5
- when set, overrides it.</prop>
5
+ set on the stack itself, overrides it; set on an ancestor, it does nothing.</prop>
6
6
  <prop name="align" type="start | center | end | stretch"
7
7
  >How items sit across the stack: stretch (the default) makes each fill the stack's width; start, center, and end keep each at its own width, against the
8
8
  start, in the middle, or against the end.</prop>
@@ -12,6 +12,12 @@
12
12
  </defs>
13
13
  <div><slot></slot></div>
14
14
  <style>
15
+ /* This component's hooks style the element they are set on, and never a nested one. */
16
+ @property --ui-stack-gap {
17
+ syntax: "*";
18
+ inherits: false;
19
+ }
20
+
15
21
  :host {
16
22
  --_layout-gap: var(--ui-space-4);
17
23
  display: flex;
@@ -20,7 +20,25 @@
20
20
  </span>
21
21
  </label>
22
22
  <style>
23
+ /* This component's hooks style the element they are set on, and never a nested one. */
24
+ @property --ui-switch-gap {
25
+ syntax: "*";
26
+ inherits: false;
27
+ }
28
+ @property --ui-switch-track-height {
29
+ syntax: "*";
30
+ inherits: false;
31
+ }
32
+ @property --ui-switch-track-width {
33
+ syntax: "*";
34
+ inherits: false;
35
+ }
36
+
23
37
  :host {
38
+ /* Hooks do not inherit, so the parts below read them from the root. */
39
+ --_ui-switch-track-width: var(--ui-switch-track-width);
40
+ --_ui-switch-track-height: var(--ui-switch-track-height);
41
+
24
42
  display: inline-flex;
25
43
  align-items: flex-start;
26
44
  gap: var(--ui-switch-gap, var(--ui-space-2));
@@ -57,8 +75,8 @@
57
75
  -webkit-appearance: none;
58
76
  position: relative;
59
77
  flex: 0 0 auto;
60
- width: var(--ui-switch-track-width, 2.5rem);
61
- height: var(--ui-switch-track-height, 1.5rem);
78
+ width: var(--_ui-switch-track-width, 2.5rem);
79
+ height: var(--_ui-switch-track-height, 1.5rem);
62
80
  padding: 0;
63
81
  border: 1px solid var(--ui-control-border-hover, var(--ui-border-strong));
64
82
  border-radius: 999px;
@@ -98,7 +116,7 @@
98
116
  }
99
117
 
100
118
  :host-state([disabled]) {
101
- color: var(--ui-text-muted);
119
+ color: var(--ui-disabled-text);
102
120
  cursor: not-allowed;
103
121
  }
104
122
  :host-state([disabled]) input {
@@ -2,7 +2,7 @@
2
2
  <defs>
3
3
  <prop name="gap" type="xs | s | m | l | xl"
4
4
  >Space between items, on the spacing scale: xs is 0.5rem, s 0.75rem, m 1rem (also the default), l 1.5rem, and xl 2rem. The --ui-switcher-gap custom
5
- property, when set, overrides it.</prop>
5
+ property, set on the switcher itself, overrides it; set on an ancestor, it does nothing.</prop>
6
6
  <prop name="threshold" type="xs | sm | md | lg"
7
7
  >The container width at which items switch between a row and a stack: wider, they all sit side by side; narrower, each takes the full width. xs is 20rem, sm
8
8
  is 30rem (also the default), md is 45rem, and lg is 60rem.</prop>
@@ -12,7 +12,20 @@
12
12
  </defs>
13
13
  <div><slot></slot></div>
14
14
  <style>
15
+ /* This component's hooks style the element they are set on, and never a nested one. */
16
+ @property --ui-switcher-gap {
17
+ syntax: "*";
18
+ inherits: false;
19
+ }
20
+ @property --ui-switcher-threshold {
21
+ syntax: "*";
22
+ inherits: false;
23
+ }
24
+
15
25
  :host {
26
+ /* Hooks do not inherit, so the parts below read them from the root. */
27
+ --_ui-switcher-threshold: var(--ui-switcher-threshold);
28
+
16
29
  --_switcher-gap: var(--ui-space-4);
17
30
  display: flex;
18
31
  flex-wrap: wrap;
@@ -26,7 +39,7 @@
26
39
  min-inline-size: 0;
27
40
  flex-grow: 1;
28
41
  /* The large multiplier makes the basis flip as a group at the intrinsic threshold. */
29
- flex-basis: calc((var(--ui-switcher-threshold, 30rem) - 100%) * 999);
42
+ flex-basis: calc((var(--_ui-switcher-threshold, 30rem) - 100%) * 999);
30
43
  }
31
44
 
32
45
  :host-state([gap="xs"]) {
@@ -45,13 +58,13 @@
45
58
  --_switcher-gap: var(--ui-space-6);
46
59
  }
47
60
  :host-state([threshold="xs"]) > :slotted(*) {
48
- flex-basis: calc((var(--ui-switcher-threshold, 20rem) - 100%) * 999);
61
+ flex-basis: calc((var(--_ui-switcher-threshold, 20rem) - 100%) * 999);
49
62
  }
50
63
  :host-state([threshold="md"]) > :slotted(*) {
51
- flex-basis: calc((var(--ui-switcher-threshold, 45rem) - 100%) * 999);
64
+ flex-basis: calc((var(--_ui-switcher-threshold, 45rem) - 100%) * 999);
52
65
  }
53
66
  :host-state([threshold="lg"]) > :slotted(*) {
54
- flex-basis: calc((var(--ui-switcher-threshold, 60rem) - 100%) * 999);
67
+ flex-basis: calc((var(--_ui-switcher-threshold, 60rem) - 100%) * 999);
55
68
  }
56
69
  :host-state([align="start"]) {
57
70
  align-items: flex-start;
@@ -32,8 +32,27 @@
32
32
  <div class="panels" $ref="panels"><slot></slot></div>
33
33
  </div>
34
34
  <style>
35
+ /* This component's hooks style the element they are set on, and never a nested one. */
36
+ @property --ui-tabs-tab-min-block-size {
37
+ syntax: "*";
38
+ inherits: false;
39
+ }
40
+ @property --ui-tabs-tab-padding-block {
41
+ syntax: "*";
42
+ inherits: false;
43
+ }
44
+ @property --ui-tabs-tab-padding-inline {
45
+ syntax: "*";
46
+ inherits: false;
47
+ }
48
+
35
49
  /* Density resolves into the tab row's own values; the public tokens still override them. */
36
50
  :host {
51
+ /* Hooks do not inherit, so the parts below read them from the root. */
52
+ --_ui-tabs-tab-min-block-size: var(--ui-tabs-tab-min-block-size);
53
+ --_ui-tabs-tab-padding-block: var(--ui-tabs-tab-padding-block);
54
+ --_ui-tabs-tab-padding-inline: var(--ui-tabs-tab-padding-inline);
55
+
37
56
  --_tab-min-block-size: var(--ui-control-size);
38
57
  --_tab-padding-block: var(--ui-space-2);
39
58
  --_tab-padding-inline: var(--ui-space-3);
@@ -69,9 +88,9 @@
69
88
  }
70
89
 
71
90
  .list button {
72
- min-block-size: var(--ui-tabs-tab-min-block-size, var(--_tab-min-block-size));
91
+ min-block-size: var(--_ui-tabs-tab-min-block-size, var(--_tab-min-block-size));
73
92
  margin: 0 0 -1px;
74
- padding: var(--ui-tabs-tab-padding-block, var(--_tab-padding-block)) var(--ui-tabs-tab-padding-inline, var(--_tab-padding-inline));
93
+ padding: var(--_ui-tabs-tab-padding-block, var(--_tab-padding-block)) var(--_ui-tabs-tab-padding-inline, var(--_tab-padding-inline));
75
94
  border: 0;
76
95
  border-block-end: 2px solid transparent;
77
96
  background: transparent;
@@ -11,6 +11,20 @@
11
11
  </defs>
12
12
  <textarea :value="value" :disabled="disabled" :readonly="readonly" :required="required" :aria-invalid="invalid" :rows="rows"></textarea>
13
13
  <style>
14
+ /* This component's hooks style the element they are set on, and never a nested one. */
15
+ @property --ui-textarea-focus-shadow {
16
+ syntax: "*";
17
+ inherits: false;
18
+ }
19
+ @property --ui-textarea-radius {
20
+ syntax: "*";
21
+ inherits: false;
22
+ }
23
+ @property --ui-textarea-shadow {
24
+ syntax: "*";
25
+ inherits: false;
26
+ }
27
+
14
28
  :host {
15
29
  box-sizing: border-box;
16
30
  display: inline-block;
@@ -69,7 +83,7 @@
69
83
 
70
84
  :host:disabled {
71
85
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
72
- color: var(--ui-text-muted);
86
+ color: var(--ui-disabled-text);
73
87
  box-shadow: none;
74
88
  cursor: not-allowed;
75
89
  }
@@ -29,7 +29,21 @@
29
29
  </div>
30
30
  </div>
31
31
  <style>
32
+ /* This component's hooks style the element they are set on, and never a nested one. */
33
+ @property --ui-toast-region-enter-duration {
34
+ syntax: "*";
35
+ inherits: false;
36
+ }
37
+ @property --ui-toast-region-exit-duration {
38
+ syntax: "*";
39
+ inherits: false;
40
+ }
41
+
32
42
  :host {
43
+ /* Hooks do not inherit, so the parts below read them from the root. */
44
+ --_ui-toast-region-enter-duration: var(--ui-toast-region-enter-duration);
45
+ --_ui-toast-region-exit-duration: var(--ui-toast-region-exit-duration);
46
+
33
47
  position: fixed;
34
48
  top: calc(var(--ui-space-4) + env(safe-area-inset-top));
35
49
  right: auto;
@@ -72,12 +86,12 @@
72
86
  background: var(--ui-surface-elevated);
73
87
  color: var(--ui-text-primary);
74
88
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
75
- animation: ui-toast-enter var(--ui-toast-region-enter-duration, 0.32s) var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
89
+ animation: ui-toast-enter var(--_ui-toast-region-enter-duration, 0.32s) var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
76
90
  }
77
91
 
78
92
  /* Leaving slides on down and fades; the controller removes the toast when this ends. */
79
93
  .toast.closing {
80
- animation: ui-toast-exit var(--ui-toast-region-exit-duration, 0.22s) var(--ui-motion-ease) both;
94
+ animation: ui-toast-exit var(--_ui-toast-region-exit-duration, 0.22s) var(--ui-motion-ease) both;
81
95
  pointer-events: none;
82
96
  }
83
97
 
@@ -21,7 +21,56 @@
21
21
  </defs>
22
22
  <span role="tooltip" :hidden="not internalOpen"><div class="surface"><slot></slot></div></span>
23
23
  <style>
24
+ /* This component's hooks style the element they are set on, and never a nested one. */
25
+ @property --ui-tooltip-arrow-size {
26
+ syntax: "*";
27
+ inherits: false;
28
+ }
29
+ @property --ui-tooltip-border {
30
+ syntax: "*";
31
+ inherits: false;
32
+ }
33
+ @property --ui-tooltip-inverse-surface {
34
+ syntax: "*";
35
+ inherits: false;
36
+ }
37
+ @property --ui-tooltip-inverse-text {
38
+ syntax: "*";
39
+ inherits: false;
40
+ }
41
+ @property --ui-tooltip-max-inline-size {
42
+ syntax: "*";
43
+ inherits: false;
44
+ }
45
+ @property --ui-tooltip-radius {
46
+ syntax: "*";
47
+ inherits: false;
48
+ }
49
+ @property --ui-tooltip-shadow {
50
+ syntax: "*";
51
+ inherits: false;
52
+ }
53
+ @property --ui-tooltip-surface {
54
+ syntax: "*";
55
+ inherits: false;
56
+ }
57
+ @property --ui-tooltip-text {
58
+ syntax: "*";
59
+ inherits: false;
60
+ }
61
+
24
62
  :host {
63
+ /* Hooks do not inherit, so the parts below read them from the root. */
64
+ --_ui-tooltip-border: var(--ui-tooltip-border);
65
+ --_ui-tooltip-max-inline-size: var(--ui-tooltip-max-inline-size);
66
+ --_ui-tooltip-radius: var(--ui-tooltip-radius);
67
+ --_ui-tooltip-surface: var(--ui-tooltip-surface);
68
+ --_ui-tooltip-text: var(--ui-tooltip-text);
69
+ --_ui-tooltip-shadow: var(--ui-tooltip-shadow);
70
+ --_ui-tooltip-inverse-surface: var(--ui-tooltip-inverse-surface);
71
+ --_ui-tooltip-inverse-text: var(--ui-tooltip-inverse-text);
72
+ --_ui-tooltip-arrow-size: var(--ui-tooltip-arrow-size);
73
+
25
74
  position: fixed;
26
75
  inset: auto;
27
76
  margin: 0;
@@ -44,25 +93,25 @@
44
93
  }
45
94
 
46
95
  .surface {
47
- --_tooltip-line: var(--ui-tooltip-border, var(--ui-border-default));
96
+ --_tooltip-line: var(--_ui-tooltip-border, var(--ui-border-default));
48
97
  position: relative;
49
98
  box-sizing: border-box;
50
- max-inline-size: var(--ui-tooltip-max-inline-size, 18rem);
99
+ max-inline-size: var(--_ui-tooltip-max-inline-size, 18rem);
51
100
  border: 1px solid var(--_tooltip-line);
52
- border-radius: var(--ui-tooltip-radius, var(--ui-radius-sm));
53
- background: var(--ui-tooltip-surface, var(--ui-surface-elevated));
54
- color: var(--ui-tooltip-text, var(--ui-text-primary));
101
+ border-radius: var(--_ui-tooltip-radius, var(--ui-radius-sm));
102
+ background: var(--_ui-tooltip-surface, var(--ui-surface-elevated));
103
+ color: var(--_ui-tooltip-text, var(--ui-text-primary));
55
104
  padding: var(--ui-space-1) var(--ui-space-2);
56
105
  font-family: var(--ui-font-family-sans);
57
106
  font-size: var(--ui-font-size-sm);
58
107
  line-height: var(--ui-line-height-tight);
59
- box-shadow: var(--ui-tooltip-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md)));
108
+ box-shadow: var(--_ui-tooltip-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md)));
60
109
  }
61
110
 
62
111
  :host-state([inverse]) .surface {
63
- --_tooltip-line: var(--ui-tooltip-inverse-surface, var(--ui-text-primary));
64
- background: var(--ui-tooltip-inverse-surface, var(--ui-text-primary));
65
- color: var(--ui-tooltip-inverse-text, var(--ui-surface-default));
112
+ --_tooltip-line: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
113
+ background: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
114
+ color: var(--_ui-tooltip-inverse-text, var(--ui-surface-default));
66
115
  }
67
116
 
68
117
  /* A rotated square shares the surface fill and draws the two outward border edges. Its centre sits on
@@ -72,9 +121,9 @@
72
121
  position: absolute;
73
122
  z-index: 1;
74
123
  inset-inline-start: var(--ui-space-3);
75
- inset-block-end: calc(var(--ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
76
- inline-size: var(--ui-tooltip-arrow-size, 0.5rem);
77
- block-size: var(--ui-tooltip-arrow-size, 0.5rem);
124
+ inset-block-end: calc(var(--_ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
125
+ inline-size: var(--_ui-tooltip-arrow-size, 0.5rem);
126
+ block-size: var(--_ui-tooltip-arrow-size, 0.5rem);
78
127
  box-sizing: border-box;
79
128
  background: inherit;
80
129
  border: 0 solid var(--_tooltip-line);
@@ -85,7 +134,7 @@
85
134
  }
86
135
 
87
136
  :is(:host-state([placement="bottom"]), :host-state([placement="bottom-start"]), :host-state([placement="bottom-end"])) .surface::after {
88
- inset-block-start: calc(var(--ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
137
+ inset-block-start: calc(var(--_ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
89
138
  inset-block-end: auto;
90
139
  border-inline-end-width: 0;
91
140
  border-block-end-width: 0;
@@ -6,7 +6,40 @@
6
6
  <div class="actions"><slot name="actions"></slot></div>
7
7
  </header>
8
8
  <style>
9
+ /* This component's hooks style the element they are set on, and never a nested one. */
10
+ @property --ui-top-bar-actions-gap {
11
+ syntax: "*";
12
+ inherits: false;
13
+ }
14
+ @property --ui-top-bar-border {
15
+ syntax: "*";
16
+ inherits: false;
17
+ }
18
+ @property --ui-top-bar-gap {
19
+ syntax: "*";
20
+ inherits: false;
21
+ }
22
+ @property --ui-top-bar-height {
23
+ syntax: "*";
24
+ inherits: false;
25
+ }
26
+ @property --ui-top-bar-padding-inline {
27
+ syntax: "*";
28
+ inherits: false;
29
+ }
30
+ @property --ui-top-bar-surface {
31
+ syntax: "*";
32
+ inherits: false;
33
+ }
34
+ @property --ui-top-bar-z-index {
35
+ syntax: "*";
36
+ inherits: false;
37
+ }
38
+
9
39
  :host {
40
+ /* Hooks do not inherit, so the parts below read them from the root. */
41
+ --_ui-top-bar-actions-gap: var(--ui-top-bar-actions-gap);
42
+
10
43
  position: sticky;
11
44
  inset-block-start: 0;
12
45
  z-index: var(--ui-top-bar-z-index, 100);
@@ -30,7 +63,7 @@
30
63
  }
31
64
 
32
65
  .actions {
33
- gap: var(--ui-top-bar-actions-gap, var(--ui-space-1));
66
+ gap: var(--_ui-top-bar-actions-gap, var(--ui-space-1));
34
67
  }
35
68
 
36
69
  .title {