@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.
- package/components/ui-action-bar/ui-action-bar.html +10 -1
- package/components/ui-avatar/ui-avatar.html +18 -0
- package/components/ui-avatar-group/ui-avatar-group.html +16 -2
- package/components/ui-badge/ui-badge.html +42 -0
- package/components/ui-button/ui-button.html +70 -0
- package/components/ui-callout/ui-callout.html +55 -4
- package/components/ui-checkbox/ui-checkbox.html +16 -3
- package/components/ui-cluster/ui-cluster.html +7 -1
- package/components/ui-combobox/ui-combobox.html +66 -12
- package/components/ui-container/ui-container.html +12 -1
- package/components/ui-context-menu/ui-context-menu.html +10 -1
- package/components/ui-dialog/ui-dialog.html +21 -4
- package/components/ui-disclosure/ui-disclosure.html +23 -4
- package/components/ui-editable/ui-editable.html +1 -1
- package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +2 -2
- package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +2 -2
- package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +8 -8
- package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +3 -3
- package/components/ui-floating-action-button/ui-floating-action-button.html +14 -0
- package/components/ui-form-field/ui-form-field.html +10 -1
- package/components/ui-grid/ui-grid.html +11 -1
- package/components/ui-icon/ui-icon.html +17 -3
- package/components/ui-icon-button/ui-icon-button.html +81 -3
- package/components/ui-input/ui-input.html +68 -13
- package/components/ui-input-group/ui-input-group.html +14 -13
- package/components/ui-list/ui-list.html +10 -0
- package/components/ui-list-item/ui-list-item.html +22 -1
- package/components/ui-menu/ui-menu.html +17 -5
- package/components/ui-menu-item/ui-menu-item.html +30 -3
- package/components/ui-nav-item/ui-nav-item.html +14 -0
- package/components/ui-popover/ui-popover.html +6 -0
- package/components/ui-radio/ui-radio.html +16 -3
- package/components/ui-reel/ui-reel.html +15 -2
- package/components/ui-search-result-row/ui-search-result-row.html +34 -0
- package/components/ui-search-shell/ui-search-shell.html +65 -11
- package/components/ui-select/ui-select.html +15 -1
- package/components/ui-separator/ui-separator.html +9 -2
- package/components/ui-sidebar/ui-sidebar.html +22 -1
- package/components/ui-stack/ui-stack.html +7 -1
- package/components/ui-switch/ui-switch.html +21 -3
- package/components/ui-switcher/ui-switcher.html +18 -5
- package/components/ui-tabs/ui-tabs.html +21 -2
- package/components/ui-textarea/ui-textarea.html +15 -1
- package/components/ui-toast-region/ui-toast-region.html +16 -2
- package/components/ui-tooltip/ui-tooltip.html +62 -13
- package/components/ui-top-bar/ui-top-bar.html +34 -1
- package/components/ui-tree/ui-tree.html +27 -4
- package/components/ui-tree-item/ui-tree-item.html +39 -10
- package/components/ui-tree-item/ui-tree-item.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/styles/ui-action-bar.css +14 -3
- package/styles/ui-avatar-group.css +20 -4
- package/styles/ui-avatar.css +22 -2
- package/styles/ui-badge.css +46 -2
- package/styles/ui-button.css +74 -2
- package/styles/ui-callout.css +59 -6
- package/styles/ui-checkbox.css +20 -5
- package/styles/ui-cluster.css +10 -2
- package/styles/ui-combobox.css +69 -14
- package/styles/ui-container.css +14 -2
- package/styles/ui-context-menu.css +14 -3
- package/styles/ui-dialog.css +25 -6
- package/styles/ui-disclosure.css +27 -6
- package/styles/ui-editable.css +1 -1
- package/styles/ui-editor-slash-menu.css +2 -2
- package/styles/ui-editor-table-context-menu.css +2 -2
- package/styles/ui-editor-table-overlay.css +8 -8
- package/styles/ui-editor-table-toolbar.css +3 -3
- package/styles/ui-floating-action-button.css +18 -2
- package/styles/ui-form-field.css +14 -3
- package/styles/ui-grid.css +14 -2
- package/styles/ui-icon-button.css +85 -5
- package/styles/ui-icon.css +21 -5
- package/styles/ui-input-group.css +14 -13
- package/styles/ui-input.css +73 -15
- package/styles/ui-list-item.css +26 -3
- package/styles/ui-list.css +14 -2
- package/styles/ui-menu-item.css +34 -5
- package/styles/ui-menu.css +21 -6
- package/styles/ui-nav-item.css +18 -2
- package/styles/ui-popover.css +10 -2
- package/styles/ui-radio.css +20 -5
- package/styles/ui-reel.css +18 -3
- package/styles/ui-search-result-row.css +38 -2
- package/styles/ui-search-shell.css +69 -13
- package/styles/ui-select.css +19 -3
- package/styles/ui-separator.css +14 -2
- package/styles/ui-sidebar.css +26 -3
- package/styles/ui-stack.css +10 -2
- package/styles/ui-switch.css +25 -5
- package/styles/ui-switcher.css +21 -6
- package/styles/ui-tabs.css +25 -4
- package/styles/ui-textarea.css +19 -3
- package/styles/ui-toast-region.css +20 -4
- package/styles/ui-tooltip.css +66 -15
- package/styles/ui-top-bar.css +38 -3
- package/styles/ui-tree-item.css +43 -12
- package/styles/ui-tree.css +33 -6
- package/theme-dark.css +1 -1
- package/theme-light.css +1 -1
- package/tokens.css +8 -6
- package/vue/UiActionBar.vue +12 -3
- package/vue/UiAvatar.vue +18 -0
- package/vue/UiAvatarGroup.vue +16 -2
- package/vue/UiBadge.vue +42 -0
- package/vue/UiButton.vue +70 -0
- package/vue/UiCallout.vue +55 -4
- package/vue/UiCheckbox.vue +16 -3
- package/vue/UiCluster.vue +6 -0
- package/vue/UiCombobox.vue +66 -12
- package/vue/UiContainer.vue +10 -0
- package/vue/UiContextMenu.vue +10 -1
- package/vue/UiDialog.vue +21 -4
- package/vue/UiDisclosure.vue +23 -4
- package/vue/UiEditable.vue +1 -1
- package/vue/UiEditorSlashMenu.vue +2 -2
- package/vue/UiEditorTableContextMenu.vue +2 -2
- package/vue/UiEditorTableOverlay.vue +8 -8
- package/vue/UiEditorTableToolbar.vue +3 -3
- package/vue/UiFloatingActionButton.vue +14 -0
- package/vue/UiFormField.vue +10 -1
- package/vue/UiGrid.vue +10 -0
- package/vue/UiIcon.vue +17 -3
- package/vue/UiIconButton.vue +81 -3
- package/vue/UiInput.vue +90 -15
- package/vue/UiInputGroup.vue +14 -13
- package/vue/UiList.vue +12 -2
- package/vue/UiListItem.vue +30 -9
- package/vue/UiMenu.vue +17 -5
- package/vue/UiMenuItem.vue +42 -4
- package/vue/UiNavItem.vue +17 -3
- package/vue/UiPopover.vue +6 -0
- package/vue/UiRadio.vue +16 -3
- package/vue/UiReel.vue +14 -1
- package/vue/UiSearchResultRow.vue +34 -0
- package/vue/UiSearchShell.vue +66 -12
- package/vue/UiSelect.vue +15 -1
- package/vue/UiSeparator.vue +9 -2
- package/vue/UiSidebar.vue +22 -1
- package/vue/UiStack.vue +6 -0
- package/vue/UiSwitch.vue +21 -3
- package/vue/UiSwitcher.vue +17 -4
- package/vue/UiTabs.vue +22 -3
- package/vue/UiTextarea.vue +15 -1
- package/vue/UiToastRegion.vue +16 -2
- package/vue/UiTooltip.vue +62 -13
- package/vue/UiTopBar.vue +34 -1
- package/vue/UiTree.vue +28 -5
- package/vue/UiTreeItem.vue +46 -11
- package/vue/chunks/UiActionBar.js +1 -1
- package/vue/chunks/UiAvatar.js +1 -1
- package/vue/chunks/UiAvatarGroup.js +1 -1
- package/vue/chunks/UiBadge.js +1 -1
- package/vue/chunks/UiButton.js +1 -1
- package/vue/chunks/UiCallout.js +1 -1
- package/vue/chunks/UiCheckbox.js +1 -1
- package/vue/chunks/UiCluster.js +1 -1
- package/vue/chunks/UiCombobox.js +1 -1
- package/vue/chunks/UiContainer.js +1 -1
- package/vue/chunks/UiContextMenu.js +1 -1
- package/vue/chunks/UiDialog.js +1 -1
- package/vue/chunks/UiDisclosure.js +1 -1
- package/vue/chunks/UiEditable.js +1 -1
- package/vue/chunks/UiEditorSlashMenu.js +1 -1
- package/vue/chunks/UiEditorTableContextMenu.js +1 -1
- package/vue/chunks/UiEditorTableOverlay.js +1 -1
- package/vue/chunks/UiEditorTableToolbar.js +1 -1
- package/vue/chunks/UiFloatingActionButton.js +1 -1
- package/vue/chunks/UiFormField.js +1 -1
- package/vue/chunks/UiGrid.js +1 -1
- package/vue/chunks/UiIcon.js +1 -1
- package/vue/chunks/UiIconButton.js +1 -1
- package/vue/chunks/UiInput.js +1 -1
- package/vue/chunks/UiInputGroup.js +1 -1
- package/vue/chunks/UiList.js +1 -1
- package/vue/chunks/UiListItem.js +1 -1
- package/vue/chunks/UiMenu.js +1 -1
- package/vue/chunks/UiMenuItem.js +1 -1
- package/vue/chunks/UiNavItem.js +1 -1
- package/vue/chunks/UiPopover.js +1 -1
- package/vue/chunks/UiRadio.js +1 -1
- package/vue/chunks/UiReel.js +1 -1
- package/vue/chunks/UiSearchResultRow.js +1 -1
- package/vue/chunks/UiSearchShell.js +1 -1
- package/vue/chunks/UiSelect.js +1 -1
- package/vue/chunks/UiSeparator.js +1 -1
- package/vue/chunks/UiSidebar.js +1 -1
- package/vue/chunks/UiStack.js +1 -1
- package/vue/chunks/UiSwitch.js +1 -1
- package/vue/chunks/UiSwitcher.js +1 -1
- package/vue/chunks/UiTabs.js +1 -1
- package/vue/chunks/UiTextarea.js +1 -1
- package/vue/chunks/UiToastRegion.js +1 -1
- package/vue/chunks/UiTooltip.js +1 -1
- package/vue/chunks/UiTopBar.js +1 -1
- package/vue/chunks/UiTree.js +1 -1
- package/vue/chunks/UiTreeItem.js +1 -1
- package/vue/components.css +1959 -927
package/vue/UiNavItem.vue
CHANGED
|
@@ -57,10 +57,24 @@ function attribute(value: unknown): any {
|
|
|
57
57
|
</template>
|
|
58
58
|
|
|
59
59
|
<style scoped>
|
|
60
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
61
|
+
@property --ui-nav-item-current-surface {
|
|
62
|
+
syntax: "*";
|
|
63
|
+
inherits: false;
|
|
64
|
+
}
|
|
65
|
+
@property --ui-nav-item-indicator-color {
|
|
66
|
+
syntax: "*";
|
|
67
|
+
inherits: false;
|
|
68
|
+
}
|
|
69
|
+
@property --ui-nav-item-indicator-width {
|
|
70
|
+
syntax: "*";
|
|
71
|
+
inherits: false;
|
|
72
|
+
}
|
|
73
|
+
|
|
60
74
|
/* One destination in a side or rail navigation: an icon to find it by (leading), its name (the
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
75
|
+
default slot), and an optional line under it (description), such as the record a section
|
|
76
|
+
belongs to. Label and description are one line each and end in an ellipsis, so every item in a
|
|
77
|
+
navigation has the same height and the rail never grows sideways. */
|
|
64
78
|
[data-component~="ui-nav-item"] {
|
|
65
79
|
--_indicator-width: var(--ui-nav-item-indicator-width, 3px);
|
|
66
80
|
--_indicator-color: var(--ui-nav-item-indicator-color, var(--ui-accent));
|
package/vue/UiPopover.vue
CHANGED
|
@@ -83,6 +83,12 @@ useComponentHost(controllerModule.default, {
|
|
|
83
83
|
</template>
|
|
84
84
|
|
|
85
85
|
<style scoped>
|
|
86
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
87
|
+
@property --ui-popover-viewport-gap {
|
|
88
|
+
syntax: "*";
|
|
89
|
+
inherits: false;
|
|
90
|
+
}
|
|
91
|
+
|
|
86
92
|
[data-component~="ui-popover"] {
|
|
87
93
|
box-sizing: border-box;
|
|
88
94
|
max-inline-size: min(
|
package/vue/UiRadio.vue
CHANGED
|
@@ -92,7 +92,20 @@ useComponentHost(controllerModule.default, {
|
|
|
92
92
|
</template>
|
|
93
93
|
|
|
94
94
|
<style scoped>
|
|
95
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
96
|
+
@property --ui-radio-gap {
|
|
97
|
+
syntax: "*";
|
|
98
|
+
inherits: false;
|
|
99
|
+
}
|
|
100
|
+
@property --ui-radio-size {
|
|
101
|
+
syntax: "*";
|
|
102
|
+
inherits: false;
|
|
103
|
+
}
|
|
104
|
+
|
|
95
105
|
[data-component~="ui-radio"] {
|
|
106
|
+
/* Hooks do not inherit, so the parts below read them from the root. */
|
|
107
|
+
--_ui-radio-size: var(--ui-radio-size);
|
|
108
|
+
|
|
96
109
|
display: inline-flex;
|
|
97
110
|
align-items: flex-start;
|
|
98
111
|
gap: var(--ui-radio-gap, var(--ui-space-2));
|
|
@@ -126,8 +139,8 @@ useComponentHost(controllerModule.default, {
|
|
|
126
139
|
|
|
127
140
|
input {
|
|
128
141
|
flex: 0 0 auto;
|
|
129
|
-
inline-size: var(--
|
|
130
|
-
block-size: var(--
|
|
142
|
+
inline-size: var(--_ui-radio-size, 1.125rem);
|
|
143
|
+
block-size: var(--_ui-radio-size, 1.125rem);
|
|
131
144
|
margin: 0.125em 0 0;
|
|
132
145
|
accent-color: var(--ui-accent-solid);
|
|
133
146
|
cursor: pointer;
|
|
@@ -139,7 +152,7 @@ input:focus-visible {
|
|
|
139
152
|
}
|
|
140
153
|
|
|
141
154
|
[data-component~="ui-radio"][data-ui-radio-state~="disabled"] {
|
|
142
|
-
color: var(--ui-text
|
|
155
|
+
color: var(--ui-disabled-text);
|
|
143
156
|
cursor: not-allowed;
|
|
144
157
|
}
|
|
145
158
|
[data-component~="ui-radio"][data-ui-radio-state~="disabled"] input {
|
package/vue/UiReel.vue
CHANGED
|
@@ -33,7 +33,20 @@ const hostState = computed(() =>
|
|
|
33
33
|
</template>
|
|
34
34
|
|
|
35
35
|
<style scoped>
|
|
36
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
37
|
+
@property --ui-reel-gap {
|
|
38
|
+
syntax: "*";
|
|
39
|
+
inherits: false;
|
|
40
|
+
}
|
|
41
|
+
@property --ui-reel-item-width {
|
|
42
|
+
syntax: "*";
|
|
43
|
+
inherits: false;
|
|
44
|
+
}
|
|
45
|
+
|
|
36
46
|
[data-component~="ui-reel"] {
|
|
47
|
+
/* Hooks do not inherit, so the parts below read them from the root. */
|
|
48
|
+
--_ui-reel-item-width: var(--ui-reel-item-width);
|
|
49
|
+
|
|
37
50
|
--_reel-gap: var(--ui-space-4);
|
|
38
51
|
--_reel-item-width: auto;
|
|
39
52
|
display: flex;
|
|
@@ -77,7 +90,7 @@ const hostState = computed(() =>
|
|
|
77
90
|
|
|
78
91
|
[data-component~="ui-reel"] > :slotted(*) {
|
|
79
92
|
min-inline-size: 0;
|
|
80
|
-
flex: 0 0 var(--
|
|
93
|
+
flex: 0 0 var(--_ui-reel-item-width, var(--_reel-item-width));
|
|
81
94
|
}
|
|
82
95
|
|
|
83
96
|
[data-component~="ui-reel"][data-ui-reel-state~="gap=xs"] {
|
|
@@ -41,6 +41,40 @@ const hostState = computed(() =>
|
|
|
41
41
|
</template>
|
|
42
42
|
|
|
43
43
|
<style scoped>
|
|
44
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
45
|
+
@property --ui-search-result-row-border {
|
|
46
|
+
syntax: "*";
|
|
47
|
+
inherits: false;
|
|
48
|
+
}
|
|
49
|
+
@property --ui-search-result-row-gap {
|
|
50
|
+
syntax: "*";
|
|
51
|
+
inherits: false;
|
|
52
|
+
}
|
|
53
|
+
@property --ui-search-result-row-hover-surface {
|
|
54
|
+
syntax: "*";
|
|
55
|
+
inherits: false;
|
|
56
|
+
}
|
|
57
|
+
@property --ui-search-result-row-min-height {
|
|
58
|
+
syntax: "*";
|
|
59
|
+
inherits: false;
|
|
60
|
+
}
|
|
61
|
+
@property --ui-search-result-row-padding-block {
|
|
62
|
+
syntax: "*";
|
|
63
|
+
inherits: false;
|
|
64
|
+
}
|
|
65
|
+
@property --ui-search-result-row-padding-inline {
|
|
66
|
+
syntax: "*";
|
|
67
|
+
inherits: false;
|
|
68
|
+
}
|
|
69
|
+
@property --ui-search-result-row-selected-bg {
|
|
70
|
+
syntax: "*";
|
|
71
|
+
inherits: false;
|
|
72
|
+
}
|
|
73
|
+
@property --ui-search-result-row-surface {
|
|
74
|
+
syntax: "*";
|
|
75
|
+
inherits: false;
|
|
76
|
+
}
|
|
77
|
+
|
|
44
78
|
[data-component~="ui-search-result-row"] {
|
|
45
79
|
appearance: none;
|
|
46
80
|
inline-size: 100%;
|
package/vue/UiSearchShell.vue
CHANGED
|
@@ -76,23 +76,77 @@ useComponentHost(controllerModule.default, {
|
|
|
76
76
|
</template>
|
|
77
77
|
|
|
78
78
|
<style scoped>
|
|
79
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
80
|
+
@property --ui-search-shell-border {
|
|
81
|
+
syntax: "*";
|
|
82
|
+
inherits: false;
|
|
83
|
+
}
|
|
84
|
+
@property --ui-search-shell-focus-color {
|
|
85
|
+
syntax: "*";
|
|
86
|
+
inherits: false;
|
|
87
|
+
}
|
|
88
|
+
@property --ui-search-shell-max-height {
|
|
89
|
+
syntax: "*";
|
|
90
|
+
inherits: false;
|
|
91
|
+
}
|
|
92
|
+
@property --ui-search-shell-max-width {
|
|
93
|
+
syntax: "*";
|
|
94
|
+
inherits: false;
|
|
95
|
+
}
|
|
96
|
+
@property --ui-search-shell-padding-top {
|
|
97
|
+
syntax: "*";
|
|
98
|
+
inherits: false;
|
|
99
|
+
}
|
|
100
|
+
@property --ui-search-shell-radius {
|
|
101
|
+
syntax: "*";
|
|
102
|
+
inherits: false;
|
|
103
|
+
}
|
|
104
|
+
@property --ui-search-shell-shadow {
|
|
105
|
+
syntax: "*";
|
|
106
|
+
inherits: false;
|
|
107
|
+
}
|
|
108
|
+
@property --ui-search-shell-surface {
|
|
109
|
+
syntax: "*";
|
|
110
|
+
inherits: false;
|
|
111
|
+
}
|
|
112
|
+
@property --ui-search-shell-viewport-gap {
|
|
113
|
+
syntax: "*";
|
|
114
|
+
inherits: false;
|
|
115
|
+
}
|
|
116
|
+
@property --ui-search-shell-z-index {
|
|
117
|
+
syntax: "*";
|
|
118
|
+
inherits: false;
|
|
119
|
+
}
|
|
120
|
+
|
|
79
121
|
[data-component~="ui-search-shell"] {
|
|
122
|
+
/* Hooks do not inherit, so the parts below read them from the root. */
|
|
123
|
+
--_ui-search-shell-z-index: var(--ui-search-shell-z-index);
|
|
124
|
+
--_ui-search-shell-padding-top: var(--ui-search-shell-padding-top);
|
|
125
|
+
--_ui-search-shell-viewport-gap: var(--ui-search-shell-viewport-gap);
|
|
126
|
+
--_ui-search-shell-max-width: var(--ui-search-shell-max-width);
|
|
127
|
+
--_ui-search-shell-max-height: var(--ui-search-shell-max-height);
|
|
128
|
+
--_ui-search-shell-surface: var(--ui-search-shell-surface);
|
|
129
|
+
--_ui-search-shell-border: var(--ui-search-shell-border);
|
|
130
|
+
--_ui-search-shell-radius: var(--ui-search-shell-radius);
|
|
131
|
+
--_ui-search-shell-shadow: var(--ui-search-shell-shadow);
|
|
132
|
+
--_ui-search-shell-focus-color: var(--ui-search-shell-focus-color);
|
|
133
|
+
|
|
80
134
|
display: contents;
|
|
81
135
|
}
|
|
82
136
|
|
|
83
137
|
dialog {
|
|
84
138
|
position: fixed;
|
|
85
139
|
inset: 0;
|
|
86
|
-
z-index: var(--
|
|
140
|
+
z-index: var(--_ui-search-shell-z-index, 400);
|
|
87
141
|
box-sizing: border-box;
|
|
88
142
|
inline-size: 100%;
|
|
89
143
|
max-inline-size: none;
|
|
90
144
|
block-size: 100%;
|
|
91
145
|
max-block-size: none;
|
|
92
146
|
margin: 0;
|
|
93
|
-
padding: var(--
|
|
94
|
-
var(--
|
|
95
|
-
var(--
|
|
147
|
+
padding: var(--_ui-search-shell-padding-top, 10vh)
|
|
148
|
+
var(--_ui-search-shell-viewport-gap, var(--ui-space-4))
|
|
149
|
+
var(--_ui-search-shell-viewport-gap, var(--ui-space-4));
|
|
96
150
|
overflow: auto;
|
|
97
151
|
border: 0;
|
|
98
152
|
background: var(--ui-overlay-backdrop);
|
|
@@ -107,14 +161,14 @@ dialog::backdrop {
|
|
|
107
161
|
position: relative;
|
|
108
162
|
display: flex;
|
|
109
163
|
flex-direction: column;
|
|
110
|
-
inline-size: min(100%, var(--
|
|
111
|
-
max-block-size: var(--
|
|
164
|
+
inline-size: min(100%, var(--_ui-search-shell-max-width, 40rem));
|
|
165
|
+
max-block-size: var(--_ui-search-shell-max-height, 80vh);
|
|
112
166
|
margin-inline: auto;
|
|
113
167
|
overflow: hidden;
|
|
114
|
-
background: var(--
|
|
115
|
-
border: 1px solid var(--
|
|
116
|
-
border-radius: var(--
|
|
117
|
-
box-shadow: var(--
|
|
168
|
+
background: var(--_ui-search-shell-surface, var(--ui-surface-elevated));
|
|
169
|
+
border: 1px solid var(--_ui-search-shell-border, var(--ui-border-default));
|
|
170
|
+
border-radius: var(--_ui-search-shell-radius, var(--ui-radius-dialog));
|
|
171
|
+
box-shadow: var(--_ui-search-shell-shadow, var(--ui-elevation-dialog, var(--ui-shadow-xl)));
|
|
118
172
|
}
|
|
119
173
|
|
|
120
174
|
.search {
|
|
@@ -127,8 +181,8 @@ dialog::backdrop {
|
|
|
127
181
|
|
|
128
182
|
/* The search region shows where typing goes, whatever the author put in it. */
|
|
129
183
|
.search:focus-within {
|
|
130
|
-
border-block-end-color: var(--
|
|
131
|
-
box-shadow: inset 0 -1px 0 var(--
|
|
184
|
+
border-block-end-color: var(--_ui-search-shell-focus-color, var(--ui-control-focus));
|
|
185
|
+
box-shadow: inset 0 -1px 0 var(--_ui-search-shell-focus-color, var(--ui-control-focus));
|
|
132
186
|
}
|
|
133
187
|
|
|
134
188
|
:slotted(input[slot="search"]) {
|
package/vue/UiSelect.vue
CHANGED
|
@@ -54,6 +54,20 @@ useComponentHost(controllerModule.default, {
|
|
|
54
54
|
</template>
|
|
55
55
|
|
|
56
56
|
<style scoped>
|
|
57
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
58
|
+
@property --ui-select-focus-shadow {
|
|
59
|
+
syntax: "*";
|
|
60
|
+
inherits: false;
|
|
61
|
+
}
|
|
62
|
+
@property --ui-select-radius {
|
|
63
|
+
syntax: "*";
|
|
64
|
+
inherits: false;
|
|
65
|
+
}
|
|
66
|
+
@property --ui-select-shadow {
|
|
67
|
+
syntax: "*";
|
|
68
|
+
inherits: false;
|
|
69
|
+
}
|
|
70
|
+
|
|
57
71
|
[data-component~="ui-select"] {
|
|
58
72
|
box-sizing: border-box;
|
|
59
73
|
display: inline-block;
|
|
@@ -118,7 +132,7 @@ useComponentHost(controllerModule.default, {
|
|
|
118
132
|
|
|
119
133
|
[data-component~="ui-select"]:disabled {
|
|
120
134
|
background-color: var(--ui-control-surface-disabled, var(--ui-surface-muted));
|
|
121
|
-
color: var(--ui-text
|
|
135
|
+
color: var(--ui-disabled-text);
|
|
122
136
|
box-shadow: none;
|
|
123
137
|
cursor: not-allowed;
|
|
124
138
|
}
|
package/vue/UiSeparator.vue
CHANGED
|
@@ -17,7 +17,14 @@ withDefaults(
|
|
|
17
17
|
</template>
|
|
18
18
|
|
|
19
19
|
<style scoped>
|
|
20
|
-
|
|
20
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
21
|
+
@property --ui-separator-color {
|
|
22
|
+
syntax: "*";
|
|
23
|
+
inherits: false;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* The root is the hr, so the rules name :host; a bare hr matches only a descendant. */
|
|
27
|
+
[data-component~="ui-separator"] {
|
|
21
28
|
box-sizing: border-box;
|
|
22
29
|
align-self: stretch;
|
|
23
30
|
margin: 0;
|
|
@@ -25,7 +32,7 @@ hr {
|
|
|
25
32
|
border-block-start: 1px solid var(--ui-separator-color, var(--ui-border-default));
|
|
26
33
|
}
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
[data-component~="ui-separator"][aria-orientation="vertical"] {
|
|
29
36
|
block-size: auto;
|
|
30
37
|
border-block-start: 0;
|
|
31
38
|
border-inline-start: 1px solid var(--ui-separator-color, var(--ui-border-default));
|
package/vue/UiSidebar.vue
CHANGED
|
@@ -115,7 +115,28 @@ useComponentHost(controllerModule.default, {
|
|
|
115
115
|
</template>
|
|
116
116
|
|
|
117
117
|
<style scoped>
|
|
118
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
119
|
+
@property --ui-sidebar-backdrop {
|
|
120
|
+
syntax: "*";
|
|
121
|
+
inherits: false;
|
|
122
|
+
}
|
|
123
|
+
@property --ui-sidebar-border {
|
|
124
|
+
syntax: "*";
|
|
125
|
+
inherits: false;
|
|
126
|
+
}
|
|
127
|
+
@property --ui-sidebar-surface {
|
|
128
|
+
syntax: "*";
|
|
129
|
+
inherits: false;
|
|
130
|
+
}
|
|
131
|
+
@property --ui-sidebar-width {
|
|
132
|
+
syntax: "*";
|
|
133
|
+
inherits: false;
|
|
134
|
+
}
|
|
135
|
+
|
|
118
136
|
[data-component~="ui-sidebar"] {
|
|
137
|
+
/* Hooks do not inherit, so the parts below read them from the root. */
|
|
138
|
+
--_ui-sidebar-backdrop: var(--ui-sidebar-backdrop);
|
|
139
|
+
|
|
119
140
|
position: relative;
|
|
120
141
|
box-sizing: border-box;
|
|
121
142
|
display: flex;
|
|
@@ -276,7 +297,7 @@ useComponentHost(controllerModule.default, {
|
|
|
276
297
|
}
|
|
277
298
|
|
|
278
299
|
[data-component~="ui-sidebar"][popover]::backdrop {
|
|
279
|
-
background: var(--
|
|
300
|
+
background: var(--_ui-sidebar-backdrop, rgb(0 0 0 / 0.32));
|
|
280
301
|
}
|
|
281
302
|
|
|
282
303
|
@media (prefers-reduced-motion: reduce) {
|
package/vue/UiStack.vue
CHANGED
|
@@ -27,6 +27,12 @@ const hostState = computed(() =>
|
|
|
27
27
|
</template>
|
|
28
28
|
|
|
29
29
|
<style scoped>
|
|
30
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
31
|
+
@property --ui-stack-gap {
|
|
32
|
+
syntax: "*";
|
|
33
|
+
inherits: false;
|
|
34
|
+
}
|
|
35
|
+
|
|
30
36
|
[data-component~="ui-stack"] {
|
|
31
37
|
--_layout-gap: var(--ui-space-4);
|
|
32
38
|
display: flex;
|
package/vue/UiSwitch.vue
CHANGED
|
@@ -93,7 +93,25 @@ useComponentHost(controllerModule.default, {
|
|
|
93
93
|
</template>
|
|
94
94
|
|
|
95
95
|
<style scoped>
|
|
96
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
97
|
+
@property --ui-switch-gap {
|
|
98
|
+
syntax: "*";
|
|
99
|
+
inherits: false;
|
|
100
|
+
}
|
|
101
|
+
@property --ui-switch-track-height {
|
|
102
|
+
syntax: "*";
|
|
103
|
+
inherits: false;
|
|
104
|
+
}
|
|
105
|
+
@property --ui-switch-track-width {
|
|
106
|
+
syntax: "*";
|
|
107
|
+
inherits: false;
|
|
108
|
+
}
|
|
109
|
+
|
|
96
110
|
[data-component~="ui-switch"] {
|
|
111
|
+
/* Hooks do not inherit, so the parts below read them from the root. */
|
|
112
|
+
--_ui-switch-track-width: var(--ui-switch-track-width);
|
|
113
|
+
--_ui-switch-track-height: var(--ui-switch-track-height);
|
|
114
|
+
|
|
97
115
|
display: inline-flex;
|
|
98
116
|
align-items: flex-start;
|
|
99
117
|
gap: var(--ui-switch-gap, var(--ui-space-2));
|
|
@@ -130,8 +148,8 @@ input {
|
|
|
130
148
|
-webkit-appearance: none;
|
|
131
149
|
position: relative;
|
|
132
150
|
flex: 0 0 auto;
|
|
133
|
-
width: var(--
|
|
134
|
-
height: var(--
|
|
151
|
+
width: var(--_ui-switch-track-width, 2.5rem);
|
|
152
|
+
height: var(--_ui-switch-track-height, 1.5rem);
|
|
135
153
|
padding: 0;
|
|
136
154
|
border: 1px solid var(--ui-control-border-hover, var(--ui-border-strong));
|
|
137
155
|
border-radius: 999px;
|
|
@@ -173,7 +191,7 @@ input:focus-visible {
|
|
|
173
191
|
}
|
|
174
192
|
|
|
175
193
|
[data-component~="ui-switch"][data-ui-switch-state~="disabled"] {
|
|
176
|
-
color: var(--ui-text
|
|
194
|
+
color: var(--ui-disabled-text);
|
|
177
195
|
cursor: not-allowed;
|
|
178
196
|
}
|
|
179
197
|
[data-component~="ui-switch"][data-ui-switch-state~="disabled"] input {
|
package/vue/UiSwitcher.vue
CHANGED
|
@@ -31,7 +31,20 @@ const hostState = computed(() =>
|
|
|
31
31
|
</template>
|
|
32
32
|
|
|
33
33
|
<style scoped>
|
|
34
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
35
|
+
@property --ui-switcher-gap {
|
|
36
|
+
syntax: "*";
|
|
37
|
+
inherits: false;
|
|
38
|
+
}
|
|
39
|
+
@property --ui-switcher-threshold {
|
|
40
|
+
syntax: "*";
|
|
41
|
+
inherits: false;
|
|
42
|
+
}
|
|
43
|
+
|
|
34
44
|
[data-component~="ui-switcher"] {
|
|
45
|
+
/* Hooks do not inherit, so the parts below read them from the root. */
|
|
46
|
+
--_ui-switcher-threshold: var(--ui-switcher-threshold);
|
|
47
|
+
|
|
35
48
|
--_switcher-gap: var(--ui-space-4);
|
|
36
49
|
display: flex;
|
|
37
50
|
flex-wrap: wrap;
|
|
@@ -45,7 +58,7 @@ const hostState = computed(() =>
|
|
|
45
58
|
min-inline-size: 0;
|
|
46
59
|
flex-grow: 1;
|
|
47
60
|
/* The large multiplier makes the basis flip as a group at the intrinsic threshold. */
|
|
48
|
-
flex-basis: calc((var(--
|
|
61
|
+
flex-basis: calc((var(--_ui-switcher-threshold, 30rem) - 100%) * 999);
|
|
49
62
|
}
|
|
50
63
|
|
|
51
64
|
[data-component~="ui-switcher"][data-ui-switcher-state~="gap=xs"] {
|
|
@@ -64,13 +77,13 @@ const hostState = computed(() =>
|
|
|
64
77
|
--_switcher-gap: var(--ui-space-6);
|
|
65
78
|
}
|
|
66
79
|
[data-component~="ui-switcher"][data-ui-switcher-state~="threshold=xs"] > :slotted(*) {
|
|
67
|
-
flex-basis: calc((var(--
|
|
80
|
+
flex-basis: calc((var(--_ui-switcher-threshold, 20rem) - 100%) * 999);
|
|
68
81
|
}
|
|
69
82
|
[data-component~="ui-switcher"][data-ui-switcher-state~="threshold=md"] > :slotted(*) {
|
|
70
|
-
flex-basis: calc((var(--
|
|
83
|
+
flex-basis: calc((var(--_ui-switcher-threshold, 45rem) - 100%) * 999);
|
|
71
84
|
}
|
|
72
85
|
[data-component~="ui-switcher"][data-ui-switcher-state~="threshold=lg"] > :slotted(*) {
|
|
73
|
-
flex-basis: calc((var(--
|
|
86
|
+
flex-basis: calc((var(--_ui-switcher-threshold, 60rem) - 100%) * 999);
|
|
74
87
|
}
|
|
75
88
|
[data-component~="ui-switcher"][data-ui-switcher-state~="align=start"] {
|
|
76
89
|
align-items: flex-start;
|
package/vue/UiTabs.vue
CHANGED
|
@@ -100,8 +100,27 @@ useComponentHost(controllerModule.default, {
|
|
|
100
100
|
</template>
|
|
101
101
|
|
|
102
102
|
<style scoped>
|
|
103
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
104
|
+
@property --ui-tabs-tab-min-block-size {
|
|
105
|
+
syntax: "*";
|
|
106
|
+
inherits: false;
|
|
107
|
+
}
|
|
108
|
+
@property --ui-tabs-tab-padding-block {
|
|
109
|
+
syntax: "*";
|
|
110
|
+
inherits: false;
|
|
111
|
+
}
|
|
112
|
+
@property --ui-tabs-tab-padding-inline {
|
|
113
|
+
syntax: "*";
|
|
114
|
+
inherits: false;
|
|
115
|
+
}
|
|
116
|
+
|
|
103
117
|
/* Density resolves into the tab row's own values; the public tokens still override them. */
|
|
104
118
|
[data-component~="ui-tabs"] {
|
|
119
|
+
/* Hooks do not inherit, so the parts below read them from the root. */
|
|
120
|
+
--_ui-tabs-tab-min-block-size: var(--ui-tabs-tab-min-block-size);
|
|
121
|
+
--_ui-tabs-tab-padding-block: var(--ui-tabs-tab-padding-block);
|
|
122
|
+
--_ui-tabs-tab-padding-inline: var(--ui-tabs-tab-padding-inline);
|
|
123
|
+
|
|
105
124
|
--_tab-min-block-size: var(--ui-control-size);
|
|
106
125
|
--_tab-padding-block: var(--ui-space-2);
|
|
107
126
|
--_tab-padding-inline: var(--ui-space-3);
|
|
@@ -137,10 +156,10 @@ useComponentHost(controllerModule.default, {
|
|
|
137
156
|
}
|
|
138
157
|
|
|
139
158
|
.list button {
|
|
140
|
-
min-block-size: var(--
|
|
159
|
+
min-block-size: var(--_ui-tabs-tab-min-block-size, var(--_tab-min-block-size));
|
|
141
160
|
margin: 0 0 -1px;
|
|
142
|
-
padding: var(--
|
|
143
|
-
var(--
|
|
161
|
+
padding: var(--_ui-tabs-tab-padding-block, var(--_tab-padding-block))
|
|
162
|
+
var(--_ui-tabs-tab-padding-inline, var(--_tab-padding-inline));
|
|
144
163
|
border: 0;
|
|
145
164
|
border-block-end: 2px solid transparent;
|
|
146
165
|
background: transparent;
|
package/vue/UiTextarea.vue
CHANGED
|
@@ -58,6 +58,20 @@ useComponentHost(controllerModule.default, {
|
|
|
58
58
|
</template>
|
|
59
59
|
|
|
60
60
|
<style scoped>
|
|
61
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
62
|
+
@property --ui-textarea-focus-shadow {
|
|
63
|
+
syntax: "*";
|
|
64
|
+
inherits: false;
|
|
65
|
+
}
|
|
66
|
+
@property --ui-textarea-radius {
|
|
67
|
+
syntax: "*";
|
|
68
|
+
inherits: false;
|
|
69
|
+
}
|
|
70
|
+
@property --ui-textarea-shadow {
|
|
71
|
+
syntax: "*";
|
|
72
|
+
inherits: false;
|
|
73
|
+
}
|
|
74
|
+
|
|
61
75
|
[data-component~="ui-textarea"] {
|
|
62
76
|
box-sizing: border-box;
|
|
63
77
|
display: inline-block;
|
|
@@ -120,7 +134,7 @@ useComponentHost(controllerModule.default, {
|
|
|
120
134
|
|
|
121
135
|
[data-component~="ui-textarea"]:disabled {
|
|
122
136
|
background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
|
|
123
|
-
color: var(--ui-text
|
|
137
|
+
color: var(--ui-disabled-text);
|
|
124
138
|
box-shadow: none;
|
|
125
139
|
cursor: not-allowed;
|
|
126
140
|
}
|
package/vue/UiToastRegion.vue
CHANGED
|
@@ -132,7 +132,21 @@ defineExpose({
|
|
|
132
132
|
</template>
|
|
133
133
|
|
|
134
134
|
<style scoped>
|
|
135
|
+
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
136
|
+
@property --ui-toast-region-enter-duration {
|
|
137
|
+
syntax: "*";
|
|
138
|
+
inherits: false;
|
|
139
|
+
}
|
|
140
|
+
@property --ui-toast-region-exit-duration {
|
|
141
|
+
syntax: "*";
|
|
142
|
+
inherits: false;
|
|
143
|
+
}
|
|
144
|
+
|
|
135
145
|
[data-component~="ui-toast-region"] {
|
|
146
|
+
/* Hooks do not inherit, so the parts below read them from the root. */
|
|
147
|
+
--_ui-toast-region-enter-duration: var(--ui-toast-region-enter-duration);
|
|
148
|
+
--_ui-toast-region-exit-duration: var(--ui-toast-region-exit-duration);
|
|
149
|
+
|
|
136
150
|
position: fixed;
|
|
137
151
|
top: calc(var(--ui-space-4) + env(safe-area-inset-top));
|
|
138
152
|
right: auto;
|
|
@@ -175,13 +189,13 @@ defineExpose({
|
|
|
175
189
|
background: var(--ui-surface-elevated);
|
|
176
190
|
color: var(--ui-text-primary);
|
|
177
191
|
box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
|
|
178
|
-
animation: ui-toast-enter var(--
|
|
192
|
+
animation: ui-toast-enter var(--_ui-toast-region-enter-duration, 0.32s)
|
|
179
193
|
var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
|
|
180
194
|
}
|
|
181
195
|
|
|
182
196
|
/* Leaving slides on down and fades; the controller removes the toast when this ends. */
|
|
183
197
|
.toast.closing {
|
|
184
|
-
animation: ui-toast-exit var(--
|
|
198
|
+
animation: ui-toast-exit var(--_ui-toast-region-exit-duration, 0.22s) var(--ui-motion-ease) both;
|
|
185
199
|
pointer-events: none;
|
|
186
200
|
}
|
|
187
201
|
|