@threadlabs/looma 0.26.10 → 0.26.11
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-callout/ui-callout.html +13 -0
- package/components/ui-card/ui-card.html +26 -9
- package/components/ui-list-item/ui-list-item.html +4 -4
- package/components/ui-nav-item/ui-nav-item.html +4 -4
- package/components/ui-search-result-row/ui-search-result-row.html +3 -3
- package/components/ui-section/ui-section.html +12 -0
- package/components/ui-tree-item/ui-tree-item.html +6 -6
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/styles/ui-callout.css +13 -0
- package/styles/ui-card.css +26 -7
- package/styles/ui-list-item.css +4 -4
- package/styles/ui-nav-item.css +4 -4
- package/styles/ui-search-result-row.css +3 -3
- package/styles/ui-section.css +12 -0
- package/styles/ui-tree-item.css +6 -6
- package/tokens.css +2 -2
- package/vue/UiCallout.vue +33 -0
- package/vue/UiCard.vue +29 -8
- package/vue/UiListItem.vue +5 -4
- package/vue/UiNavItem.vue +8 -4
- package/vue/UiSearchResultRow.vue +3 -3
- package/vue/UiSection.vue +12 -0
- package/vue/UiTreeItem.vue +8 -6
- package/vue/chunks/UiCallout.js +1 -1
- package/vue/chunks/UiCard.js +2 -2
- package/vue/chunks/UiListItem.js +1 -1
- package/vue/chunks/UiNavItem.js +1 -1
- package/vue/chunks/UiSearchResultRow.js +1 -1
- package/vue/chunks/UiSection.js +1 -1
- package/vue/chunks/UiTreeItem.js +1 -1
- package/vue/components.css +323 -250
|
@@ -95,6 +95,16 @@
|
|
|
95
95
|
--_ui-callout-icon-size: var(--ui-callout-icon-size);
|
|
96
96
|
|
|
97
97
|
--_callout-surface: var(--ui-info-soft);
|
|
98
|
+
--_ui-selection-context-surface: light-dark(
|
|
99
|
+
oklch(from var(--ui-callout-surface, var(--_callout-surface)) calc(l - 0.045) calc(max(c, min(0.045, c * 3))) h),
|
|
100
|
+
oklch(from var(--ui-callout-surface, var(--_callout-surface)) calc(l + 0.045) calc(max(c, min(0.045, c * 3))) h)
|
|
101
|
+
);
|
|
102
|
+
--_ui-selection-context-border: light-dark(
|
|
103
|
+
oklch(from var(--ui-callout-surface, var(--_callout-surface)) calc(l - 0.085) calc(max(c, min(0.045, c * 3))) h),
|
|
104
|
+
oklch(from var(--ui-callout-surface, var(--_callout-surface)) calc(l + 0.085) calc(max(c, min(0.045, c * 3))) h)
|
|
105
|
+
);
|
|
106
|
+
--_ui-selection-context-text: var(--ui-text-primary);
|
|
107
|
+
|
|
98
108
|
--_callout-border: var(--ui-info-solid);
|
|
99
109
|
--_callout-icon: var(--ui-info-solid);
|
|
100
110
|
|
|
@@ -138,6 +148,9 @@
|
|
|
138
148
|
}
|
|
139
149
|
|
|
140
150
|
:host([tone="neutral"]), :host([tone="note"]) {
|
|
151
|
+
--_ui-selection-context-surface: initial;
|
|
152
|
+
--_ui-selection-context-border: initial;
|
|
153
|
+
--_ui-selection-context-text: initial;
|
|
141
154
|
--_callout-surface: var(--ui-surface-muted);
|
|
142
155
|
--_callout-border: var(--ui-border-strong);
|
|
143
156
|
--_callout-icon: var(--ui-text-secondary);
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
<prop name="padding" type="keyword" values="xs, sm, md, lg" default="md"
|
|
9
9
|
>The space inside the card: xs is compact (0.5rem), sm is snug (0.75rem), md is the default (1.5rem), and lg is roomy (2rem).</prop>
|
|
10
10
|
<prop name="tone" type="keyword" values="neutral, accent, info, success, warning, danger" default="neutral"
|
|
11
|
-
>accent, info, success and warning add a quiet semantic surface. danger retains its strong leading edge for consequential content.
|
|
12
|
-
controls.</prop>
|
|
11
|
+
>accent, info, success and warning add a quiet semantic surface. danger retains its strong leading edge for consequential content. Row highlights follow the
|
|
12
|
+
surface hue; action controls retain their own intent.</prop>
|
|
13
13
|
<prop name="as" type="keyword" values="div, section, article, aside" default="div"
|
|
14
14
|
>The native element the card renders. Choose the one that names the content: a section of a page, a self-contained article, or an aside.</prop>
|
|
15
15
|
</defs>
|
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
/* A surface that groups content. Its children stack with even space between them, so a card
|
|
24
24
|
needs no layout of its own. */
|
|
25
25
|
:host {
|
|
26
|
+
--_ui-card-surface: var(--ui-surface-raised);
|
|
27
|
+
--_ui-selection-context-surface: initial;
|
|
28
|
+
--_ui-selection-context-border: initial;
|
|
29
|
+
--_ui-selection-context-text: initial;
|
|
26
30
|
display: flex;
|
|
27
31
|
flex-direction: column;
|
|
28
32
|
gap: var(--ui-space-4);
|
|
@@ -31,7 +35,7 @@
|
|
|
31
35
|
padding: var(--ui-space-5);
|
|
32
36
|
border: var(--ui-border-width) solid var(--ui-border-strong);
|
|
33
37
|
border-radius: var(--ui-radius-lg);
|
|
34
|
-
background: var(--
|
|
38
|
+
background: var(--_ui-card-surface);
|
|
35
39
|
color: var(--ui-text-primary);
|
|
36
40
|
}
|
|
37
41
|
|
|
@@ -50,7 +54,7 @@
|
|
|
50
54
|
|
|
51
55
|
:host([variant="subtle"]) {
|
|
52
56
|
border-color: transparent;
|
|
53
|
-
|
|
57
|
+
--_ui-card-surface: var(--ui-surface-muted);
|
|
54
58
|
}
|
|
55
59
|
|
|
56
60
|
:host([variant="elevated"]) {
|
|
@@ -60,22 +64,22 @@
|
|
|
60
64
|
|
|
61
65
|
:host([tone="accent"]) {
|
|
62
66
|
border-color: color-mix(in srgb, var(--ui-accent) 25%, var(--ui-border-default));
|
|
63
|
-
|
|
67
|
+
--_ui-card-surface: color-mix(in srgb, var(--ui-accent) 6%, var(--ui-surface-default));
|
|
64
68
|
}
|
|
65
69
|
|
|
66
70
|
:host([tone="info"]) {
|
|
67
71
|
border-color: color-mix(in srgb, var(--ui-info) 25%, var(--ui-border-default));
|
|
68
|
-
|
|
72
|
+
--_ui-card-surface: color-mix(in srgb, var(--ui-info) 6%, var(--ui-surface-default));
|
|
69
73
|
}
|
|
70
74
|
|
|
71
75
|
:host([tone="success"]) {
|
|
72
76
|
border-color: color-mix(in srgb, var(--ui-success) 25%, var(--ui-border-default));
|
|
73
|
-
|
|
77
|
+
--_ui-card-surface: color-mix(in srgb, var(--ui-success) 6%, var(--ui-surface-default));
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
:host([tone="warning"]) {
|
|
77
81
|
border-color: color-mix(in srgb, var(--ui-warning) 25%, var(--ui-border-default));
|
|
78
|
-
|
|
82
|
+
--_ui-card-surface: color-mix(in srgb, var(--ui-warning) 6%, var(--ui-surface-default));
|
|
79
83
|
}
|
|
80
84
|
|
|
81
85
|
:host([variant="subtle"]:is([tone="accent"], [tone="info"], [tone="success"], [tone="warning"])) {
|
|
@@ -85,7 +89,20 @@
|
|
|
85
89
|
:host([tone="danger"]) {
|
|
86
90
|
border-color: color-mix(in srgb, var(--ui-danger) 45%, var(--ui-border-default));
|
|
87
91
|
border-inline-start: var(--ui-accent-line-width) solid var(--ui-danger);
|
|
88
|
-
|
|
92
|
+
--_ui-card-surface: var(--ui-danger-soft);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* A colored panel shades rows in its own hue, without changing button intent. */
|
|
96
|
+
:host([tone="accent"]), :host([tone="info"]), :host([tone="success"]), :host([tone="warning"]), :host([tone="danger"]) {
|
|
97
|
+
--_ui-selection-context-surface: light-dark(
|
|
98
|
+
oklch(from var(--_ui-card-surface) calc(l - 0.045) calc(max(c, min(0.045, c * 3))) h),
|
|
99
|
+
oklch(from var(--_ui-card-surface) calc(l + 0.045) calc(max(c, min(0.045, c * 3))) h)
|
|
100
|
+
);
|
|
101
|
+
--_ui-selection-context-border: light-dark(
|
|
102
|
+
oklch(from var(--_ui-card-surface) calc(l - 0.085) calc(max(c, min(0.045, c * 3))) h),
|
|
103
|
+
oklch(from var(--_ui-card-surface) calc(l + 0.085) calc(max(c, min(0.045, c * 3))) h)
|
|
104
|
+
);
|
|
105
|
+
--_ui-selection-context-text: var(--ui-text-primary);
|
|
89
106
|
}
|
|
90
107
|
|
|
91
108
|
:host([size="sm"]) {
|
|
@@ -83,8 +83,8 @@
|
|
|
83
83
|
:host:where(:has(.title a[href])):hover,
|
|
84
84
|
:host([highlighted]),
|
|
85
85
|
:host([current]) {
|
|
86
|
-
background: var(--ui-selection-surface);
|
|
87
|
-
box-shadow: inset 0 0 0 var(--ui-border-width) var(--ui-selection-border);
|
|
86
|
+
background: var(--_ui-selection-context-surface, var(--ui-selection-surface));
|
|
87
|
+
box-shadow: inset 0 0 0 var(--ui-border-width) var(--_ui-selection-context-border, var(--ui-selection-border));
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
:host([variant="card"]):where(:has(.title a[href])):hover {
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
:host([current]) {
|
|
95
|
-
color: var(--ui-selection-text);
|
|
95
|
+
color: var(--_ui-selection-context-text, var(--ui-selection-text));
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
/* Framed cards already have their own edge; the stronger focus ring stays separate. */
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
:host([current]) .leading {
|
|
121
|
-
color: var(--ui-selection-text);
|
|
121
|
+
color: var(--_ui-selection-context-text, var(--ui-selection-text));
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
/* An explicitly independent leading control sits above the stretched row link. */
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
:host:hover:not([aria-current]) {
|
|
100
|
-
background: var(--ui-nav-hover-surface);
|
|
100
|
+
background: var(--_ui-selection-context-surface, var(--ui-nav-hover-surface));
|
|
101
101
|
color: var(--ui-text-primary);
|
|
102
102
|
}
|
|
103
103
|
|
|
@@ -109,13 +109,13 @@
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
:host[aria-current] {
|
|
112
|
-
background: var(--ui-nav-item-current-surface, var(--ui-selection-surface));
|
|
113
|
-
color: var(--ui-selection-text);
|
|
112
|
+
background: var(--ui-nav-item-current-surface, var(--_ui-selection-context-surface, var(--ui-selection-surface)));
|
|
113
|
+
color: var(--_ui-selection-context-text, var(--ui-selection-text));
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
/* A complete inset edge separates pale fills without changing rail geometry. */
|
|
117
117
|
:host([variant="surface"]):is(:hover, [aria-current]) {
|
|
118
|
-
box-shadow: inset 0 0 0 var(--ui-border-width) var(--ui-selection-border);
|
|
118
|
+
box-shadow: inset 0 0 0 var(--ui-border-width) var(--_ui-selection-context-border, var(--ui-selection-border));
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
:host([variant="line"]) {
|
|
@@ -92,15 +92,15 @@
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
:host:hover:enabled {
|
|
95
|
-
background: var(--ui-search-result-row-hover-surface, color-mix(in srgb, var(--ui-surface) 85%, black 3%));
|
|
95
|
+
background: var(--ui-search-result-row-hover-surface, var(--_ui-selection-context-surface, color-mix(in srgb, var(--ui-surface) 85%, black 3%)));
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
:host([selected]) {
|
|
99
99
|
background: var(
|
|
100
100
|
--ui-search-result-row-selected-bg,
|
|
101
|
-
var(--ui-selection-surface)
|
|
101
|
+
var(--_ui-selection-context-surface, var(--ui-selection-surface))
|
|
102
102
|
);
|
|
103
|
-
color: var(--ui-selection-text);
|
|
103
|
+
color: var(--_ui-selection-context-text, var(--ui-selection-text));
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
:host:focus-visible {
|
|
@@ -29,6 +29,9 @@
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
:host([variant="card"]) {
|
|
32
|
+
--_ui-selection-context-surface: initial;
|
|
33
|
+
--_ui-selection-context-border: initial;
|
|
34
|
+
--_ui-selection-context-text: initial;
|
|
32
35
|
padding: var(--ui-space-5);
|
|
33
36
|
border: var(--ui-border-width) solid var(--ui-border-strong);
|
|
34
37
|
border-radius: var(--ui-radius-lg);
|
|
@@ -41,6 +44,15 @@
|
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
:host([variant="card"][tone="danger"]) {
|
|
47
|
+
--_ui-selection-context-surface: light-dark(
|
|
48
|
+
oklch(from var(--ui-danger-soft) calc(l - 0.045) calc(max(c, min(0.045, c * 3))) h),
|
|
49
|
+
oklch(from var(--ui-danger-soft) calc(l + 0.045) calc(max(c, min(0.045, c * 3))) h)
|
|
50
|
+
);
|
|
51
|
+
--_ui-selection-context-border: light-dark(
|
|
52
|
+
oklch(from var(--ui-danger-soft) calc(l - 0.085) calc(max(c, min(0.045, c * 3))) h),
|
|
53
|
+
oklch(from var(--ui-danger-soft) calc(l + 0.085) calc(max(c, min(0.045, c * 3))) h)
|
|
54
|
+
);
|
|
55
|
+
--_ui-selection-context-text: var(--ui-text-primary);
|
|
44
56
|
border-color: color-mix(in srgb, var(--ui-danger) 45%, var(--ui-border-default));
|
|
45
57
|
border-inline-start: var(--ui-accent-line-width) solid var(--ui-danger);
|
|
46
58
|
background: var(--ui-danger-soft);
|
|
@@ -178,18 +178,18 @@
|
|
|
178
178
|
.row:hover,
|
|
179
179
|
.row:focus-within {
|
|
180
180
|
color: var(--ui-text-primary);
|
|
181
|
-
background: var(--ui-surface-muted);
|
|
182
|
-
box-shadow: inset 0 0 0 var(--ui-border-width) var(--ui-selection-border);
|
|
181
|
+
background: var(--_ui-selection-context-surface, var(--ui-surface-muted));
|
|
182
|
+
box-shadow: inset 0 0 0 var(--ui-border-width) var(--_ui-selection-context-border, var(--ui-selection-border));
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
/* Selection is the same surface recipe as destination and choice rows. */
|
|
186
186
|
:host([selected]) > .row {
|
|
187
|
-
color: var(--ui-selection-text);
|
|
188
|
-
background: var(--ui-selection-surface);
|
|
189
|
-
box-shadow: inset 0 0 0 var(--ui-border-width) var(--ui-selection-border);
|
|
187
|
+
color: var(--_ui-selection-context-text, var(--ui-selection-text));
|
|
188
|
+
background: var(--_ui-selection-context-surface, var(--ui-selection-surface));
|
|
189
|
+
box-shadow: inset 0 0 0 var(--ui-border-width) var(--_ui-selection-context-border, var(--ui-selection-border));
|
|
190
190
|
}
|
|
191
191
|
:host([selected]):not([aria-disabled="true"]) > .row > .leading {
|
|
192
|
-
color: var(--ui-selection-text);
|
|
192
|
+
color: var(--_ui-selection-context-text, var(--ui-selection-text));
|
|
193
193
|
}
|
|
194
194
|
|
|
195
195
|
:host([disabled]) .row {
|