@ixfx/components 0.7.5 → 0.8.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/bundle/index.d.ts +256 -17
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +1461 -165
- package/bundle/index.js.map +1 -1
- package/dist/ac-token.js +1 -1
- package/dist/{data-grid-CtJ35v8L.d.ts → data-grid-D-z7bx5-.d.ts} +2 -2
- package/dist/{data-grid-CtJ35v8L.d.ts.map → data-grid-D-z7bx5-.d.ts.map} +1 -1
- package/dist/data-grid.d.ts +1 -1
- package/dist/data-grid.js +1 -1
- package/dist/{detail-list-BS5dRDda.d.ts → detail-list-_ZJHYEBr.d.ts} +3 -3
- package/dist/{detail-list-BS5dRDda.d.ts.map → detail-list-_ZJHYEBr.d.ts.map} +1 -1
- package/dist/detail-list.d.ts +2 -2
- package/dist/detail-list.js +1 -1
- package/dist/grid-list-nRUQOcEL.js +1537 -0
- package/dist/grid-list-nRUQOcEL.js.map +1 -0
- package/dist/{grid-list-D-GbghSH.d.ts → grid-list-u33vmKzb.d.ts} +116 -15
- package/dist/grid-list-u33vmKzb.d.ts.map +1 -0
- package/dist/grid-list.d.ts +1 -1
- package/dist/grid-list.js +1 -993
- package/dist/{incr-search-DpbSJtgj.js → incr-search-C05WjbZh.js} +40 -3
- package/dist/incr-search-C05WjbZh.js.map +1 -0
- package/dist/incr-search.d.ts +2 -2
- package/dist/incr-search.js +2 -2
- package/dist/{index-CBS4z1v-.d.ts → index-h6gxtfHH.d.ts} +34 -2
- package/dist/index-h6gxtfHH.d.ts.map +1 -0
- package/dist/index.d.ts +60 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +342 -15
- package/dist/index.js.map +1 -1
- package/dist/led.d.ts +33 -1
- package/dist/led.d.ts.map +1 -1
- package/dist/led.js +157 -13
- package/dist/led.js.map +1 -1
- package/dist/miller.d.ts +1 -1
- package/dist/miller.js +1 -1
- package/dist/narrowed-text.js +1 -1
- package/dist/panel.d.ts +3 -1
- package/dist/panel.d.ts.map +1 -1
- package/dist/panel.js +31 -1
- package/dist/panel.js.map +1 -1
- package/dist/plots.d.ts +2 -2
- package/dist/plots.js +1 -1
- package/dist/{titlebar-Bj5pfdw_.d.ts → titlebar-YQ-jVQoS.d.ts} +2 -2
- package/dist/{titlebar-Bj5pfdw_.d.ts.map → titlebar-YQ-jVQoS.d.ts.map} +1 -1
- package/dist/titlebar.d.ts +1 -1
- package/dist/titlebar.js +83 -1
- package/dist/titlebar.js.map +1 -1
- package/dist/{tree-DAii2A1g.js → tree-Chptss7I.js} +2 -2
- package/dist/{tree-DAii2A1g.js.map → tree-Chptss7I.js.map} +1 -1
- package/dist/tree.d.ts +1 -1
- package/dist/tree.js +1 -1
- package/dist/{vertical-list-DwtCPy1b.d.ts → vertical-list-CFuFDygi.d.ts} +2 -2
- package/dist/{vertical-list-DwtCPy1b.d.ts.map → vertical-list-CFuFDygi.d.ts.map} +1 -1
- package/dist/vertical-list.d.ts +1 -1
- package/dist/vertical-list.js +1 -1
- package/dist/{xy-axis-5KhVTNoX.d.ts → xy-axis-BfP9hKLj.d.ts} +25 -2
- package/dist/{xy-axis-5KhVTNoX.d.ts.map → xy-axis-BfP9hKLj.d.ts.map} +1 -1
- package/dist/{xy-axis-VrX8dmvS.js → xy-axis-DzM1brBZ.js} +141 -8
- package/dist/xy-axis-DzM1brBZ.js.map +1 -0
- package/docs-user/grid-list.md +99 -14
- package/docs-user/index.json +3 -3
- package/docs-user/led.md +37 -7
- package/docs-user/llms.txt +1 -1
- package/docs-user/panel.md +68 -13
- package/docs-user/titlebar.md +3 -4
- package/llms.txt +1 -1
- package/package.json +1 -1
- package/dist/grid-list-D-GbghSH.d.ts.map +0 -1
- package/dist/grid-list.js.map +0 -1
- package/dist/incr-search-DpbSJtgj.js.map +0 -1
- package/dist/index-CBS4z1v-.d.ts.map +0 -1
- package/dist/xy-axis-VrX8dmvS.js.map +0 -1
package/dist/led.d.ts
CHANGED
|
@@ -1,14 +1,46 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
2
|
//#region src/led/led.d.ts
|
|
3
|
+
type LedMode = `brightness` | `blink` | `pulse`;
|
|
3
4
|
declare class LedElement extends LitElement {
|
|
4
5
|
#private;
|
|
5
6
|
value: number;
|
|
6
7
|
lit: boolean;
|
|
7
8
|
color: string;
|
|
9
|
+
glow: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Operating mode:
|
|
12
|
+
* - `brightness` (default): {@link value} sets the LED brightness directly
|
|
13
|
+
* - `blink`: LED blinks on/off every {@link rate} milliseconds (this mode
|
|
14
|
+
* is what the legacy `blinking` attribute now selects)
|
|
15
|
+
* - `pulse`: LED sits unlit until {@link pulse} is called, which fires an
|
|
16
|
+
* attack/release envelope up to {@link value} and back down
|
|
17
|
+
*/
|
|
18
|
+
mode: LedMode;
|
|
19
|
+
/**
|
|
20
|
+
* Legacy alias for `mode="blink"`. Setting `blinking` switches {@link mode}
|
|
21
|
+
* to `blink`; clearing it returns to `brightness`.
|
|
22
|
+
*/
|
|
8
23
|
blinking: boolean;
|
|
9
24
|
rate: number;
|
|
25
|
+
/** Pulse-mode attack time in milliseconds (0 → instant). */
|
|
26
|
+
attackTime: number;
|
|
27
|
+
/** Pulse-mode release/decay time in milliseconds (0 → instant). */
|
|
28
|
+
releaseTime: number;
|
|
29
|
+
/**
|
|
30
|
+
* Pulse-mode retrigger behaviour. When set, each {@link pulse} call restarts
|
|
31
|
+
* the envelope from 0. When unset (default), the attack ramps from wherever
|
|
32
|
+
* the envelope currently sits, so a retrigger mid-decay is continuous.
|
|
33
|
+
*/
|
|
34
|
+
pulseRetrigger: boolean;
|
|
10
35
|
willUpdate(changedProperties: Map<string, unknown>): void;
|
|
11
36
|
disconnectedCallback(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Pulse-mode trigger: lights the LED to {@link value} using an attack/release
|
|
39
|
+
* envelope, then decays back to unlit. Calling again restarts the envelope
|
|
40
|
+
* (from 0 if {@link pulseRetrigger} is set, otherwise from the current level).
|
|
41
|
+
* No-op unless {@link mode} is `pulse`.
|
|
42
|
+
*/
|
|
43
|
+
pulse(): void;
|
|
12
44
|
protected render(): import("lit").TemplateResult<1>;
|
|
13
45
|
static styles: import("lit").CSSResult;
|
|
14
46
|
}
|
|
@@ -18,5 +50,5 @@ declare global {
|
|
|
18
50
|
}
|
|
19
51
|
}
|
|
20
52
|
//#endregion
|
|
21
|
-
export { LedElement };
|
|
53
|
+
export { LedElement, LedMode };
|
|
22
54
|
//# sourceMappingURL=led.d.ts.map
|
package/dist/led.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"led.d.ts","names":[],"sources":["../src/led/led.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"led.d.ts","names":[],"sources":["../src/led/led.ts"],"mappings":";;KAIY;cAGC,mBAAmB;;EAE9B;EAGA;EAGA;EAGA;;;;;;;;;EAWA,MAAM;;;;;EAON;EAGA;;EAIA;;EAIA;;;;;;EAQA;EAWA,WAAW,mBAAmB;EA+C9B;;;;;;;EAYA;YA6EU,wBAAM;SAIT,sBAAM;;QAwEP;YACI;IACR,YAAY"}
|
package/dist/led.js
CHANGED
|
@@ -8,15 +8,62 @@ let LedElement = class LedElement extends LitElement {
|
|
|
8
8
|
this.value = 0;
|
|
9
9
|
this.lit = false;
|
|
10
10
|
this.color = `oklch(50% 0.15 25)`;
|
|
11
|
+
this.glow = false;
|
|
12
|
+
this.mode = `brightness`;
|
|
11
13
|
this.blinking = false;
|
|
12
14
|
this.rate = 500;
|
|
15
|
+
this.attackTime = 40;
|
|
16
|
+
this.releaseTime = 400;
|
|
17
|
+
this.pulseRetrigger = false;
|
|
18
|
+
this.#appliedMode = `brightness`;
|
|
19
|
+
this.#pulseStart = 0;
|
|
20
|
+
this.#pulsePeak = 0;
|
|
21
|
+
this.#pulseFrom = 0;
|
|
22
|
+
this.#pulseLevel = 0;
|
|
23
|
+
this.#pulseTick = (now) => {
|
|
24
|
+
const attack = Math.max(0, this.attackTime);
|
|
25
|
+
const release = Math.max(0, this.releaseTime);
|
|
26
|
+
const from = this.#pulseFrom;
|
|
27
|
+
const peak = this.#pulsePeak;
|
|
28
|
+
const elapsed = now - this.#pulseStart;
|
|
29
|
+
let level;
|
|
30
|
+
if (attack > 0 && elapsed < attack) level = from + (peak - from) * (elapsed / attack);
|
|
31
|
+
else if (elapsed < attack + release) level = release > 0 ? peak * (1 - (elapsed - attack) / release) : 0;
|
|
32
|
+
else level = 0;
|
|
33
|
+
level = Math.max(0, Math.min(Math.max(from, peak), level));
|
|
34
|
+
this.#pulseLevel = level;
|
|
35
|
+
this.style.setProperty(`--value`, String(level));
|
|
36
|
+
if (elapsed < attack + release) this.#pulseRaf = requestAnimationFrame(this.#pulseTick);
|
|
37
|
+
else {
|
|
38
|
+
this.#pulseRaf = void 0;
|
|
39
|
+
this.#pulseLevel = 0;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
13
42
|
}
|
|
14
43
|
#blinkInterval;
|
|
44
|
+
#appliedMode;
|
|
45
|
+
#pulseRaf;
|
|
46
|
+
#pulseStart;
|
|
47
|
+
#pulsePeak;
|
|
48
|
+
#pulseFrom;
|
|
49
|
+
#pulseLevel;
|
|
15
50
|
willUpdate(changedProperties) {
|
|
16
|
-
if (changedProperties.has(`
|
|
17
|
-
|
|
18
|
-
|
|
51
|
+
if (changedProperties.has(`blinking`)) {
|
|
52
|
+
if (this.blinking) this.mode = `blink`;
|
|
53
|
+
else if (this.mode === `blink`) this.mode = `brightness`;
|
|
54
|
+
}
|
|
55
|
+
if (this.mode !== this.#appliedMode) {
|
|
56
|
+
this.#appliedMode = this.mode;
|
|
57
|
+
this.#onModeChange();
|
|
58
|
+
}
|
|
59
|
+
if (changedProperties.has(`lit`)) {
|
|
60
|
+
if (this.lit) this.value = 1;
|
|
61
|
+
else if (changedProperties.get(`lit`) !== void 0) this.value = 0;
|
|
62
|
+
}
|
|
63
|
+
if (changedProperties.has(`color`)) this.style.setProperty(`--_color-attr`, this.color);
|
|
64
|
+
if (this.mode !== `pulse` && (changedProperties.has(`value`) || changedProperties.has(`lit`))) this.style.setProperty(`--value`, String(this.value));
|
|
19
65
|
if (changedProperties.has(`rate`)) {
|
|
66
|
+
this.#updateBlinking();
|
|
20
67
|
const transitionMs = this.rate < 300 ? this.rate * .5 : 150;
|
|
21
68
|
this.style.setProperty(`--transition-duration`, `${transitionMs}ms`);
|
|
22
69
|
}
|
|
@@ -24,18 +71,43 @@ let LedElement = class LedElement extends LitElement {
|
|
|
24
71
|
disconnectedCallback() {
|
|
25
72
|
super.disconnectedCallback();
|
|
26
73
|
this.#stopBlinking();
|
|
74
|
+
this.#stopPulse();
|
|
27
75
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Pulse-mode trigger: lights the LED to {@link value} using an attack/release
|
|
78
|
+
* envelope, then decays back to unlit. Calling again restarts the envelope
|
|
79
|
+
* (from 0 if {@link pulseRetrigger} is set, otherwise from the current level).
|
|
80
|
+
* No-op unless {@link mode} is `pulse`.
|
|
81
|
+
*/
|
|
82
|
+
pulse() {
|
|
83
|
+
if (this.mode !== `pulse`) return;
|
|
84
|
+
this.#pulsePeak = this.value;
|
|
85
|
+
this.#pulseFrom = this.pulseRetrigger ? 0 : this.#pulseLevel;
|
|
86
|
+
this.#pulseStart = performance.now();
|
|
87
|
+
if (this.#pulseRaf === void 0) this.#pulseRaf = requestAnimationFrame(this.#pulseTick);
|
|
88
|
+
}
|
|
89
|
+
#onModeChange() {
|
|
90
|
+
this.#stopPulse();
|
|
91
|
+
this.#pulseLevel = 0;
|
|
92
|
+
this.blinking = this.mode === `blink`;
|
|
93
|
+
this.#updateBlinking();
|
|
94
|
+
this.style.setProperty(`--value`, this.mode === `pulse` ? `0` : String(this.value));
|
|
95
|
+
}
|
|
96
|
+
#pulseTick;
|
|
97
|
+
#stopPulse() {
|
|
98
|
+
if (this.#pulseRaf !== void 0) {
|
|
99
|
+
cancelAnimationFrame(this.#pulseRaf);
|
|
100
|
+
this.#pulseRaf = void 0;
|
|
37
101
|
}
|
|
38
102
|
}
|
|
103
|
+
#updateBlinking() {
|
|
104
|
+
const wasBlinking = this.#blinkInterval !== void 0;
|
|
105
|
+
this.#stopBlinking();
|
|
106
|
+
if (this.mode === `blink` && this.rate > 0) this.#blinkInterval = window.setInterval(() => {
|
|
107
|
+
this.value = this.value === 0 ? 1 : 0;
|
|
108
|
+
}, this.rate);
|
|
109
|
+
else if (wasBlinking || this.mode === `blink`) this.value = 0;
|
|
110
|
+
}
|
|
39
111
|
#stopBlinking() {
|
|
40
112
|
if (this.#blinkInterval !== void 0) {
|
|
41
113
|
clearInterval(this.#blinkInterval);
|
|
@@ -49,6 +121,8 @@ let LedElement = class LedElement extends LitElement {
|
|
|
49
121
|
this.styles = css`
|
|
50
122
|
:host {
|
|
51
123
|
--_size: var(--size, 1ex);
|
|
124
|
+
/* Resolved colour: explicit --colour wins, then the \`color\` attribute, then a default. */
|
|
125
|
+
--_colour: var(--colour, var(--_color-attr, oklch(50% 0.15 25)));
|
|
52
126
|
display: inline-block;
|
|
53
127
|
min-width: 1ex;
|
|
54
128
|
min-height: 1ex;
|
|
@@ -58,12 +132,61 @@ let LedElement = class LedElement extends LitElement {
|
|
|
58
132
|
}
|
|
59
133
|
|
|
60
134
|
div {
|
|
135
|
+
position: relative;
|
|
61
136
|
width: 100%;
|
|
62
137
|
height: 100%;
|
|
63
138
|
border-radius: 50%;
|
|
64
|
-
background: color-mix(in oklch, var(--
|
|
139
|
+
background: color-mix(in oklch, var(--_colour), white calc((1 - var(--value, 0)) * 50%));
|
|
65
140
|
transition: background var(--transition-duration, 150ms) ease-out;
|
|
66
141
|
}
|
|
142
|
+
|
|
143
|
+
/* Glow: a more realistic domed LED with a specular highlight and coloured bloom. */
|
|
144
|
+
:host([glow]) {
|
|
145
|
+
/* Body darkens toward black as the LED dims, so an unlit LED reads as a dark dome. */
|
|
146
|
+
--_body: color-mix(in oklch, var(--_colour), black calc((1 - var(--value, 0)) * 60%));
|
|
147
|
+
overflow: visible;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
:host([glow]) div {
|
|
151
|
+
background:
|
|
152
|
+
radial-gradient(circle at 32% 28%,
|
|
153
|
+
color-mix(in oklch, var(--_body), white 55%) 0%,
|
|
154
|
+
var(--_body) 45%,
|
|
155
|
+
color-mix(in oklch, var(--_body), black 32%) 100%);
|
|
156
|
+
box-shadow:
|
|
157
|
+
/* inner rim shading for depth */
|
|
158
|
+
inset 0 calc(var(--_size) * -0.1) calc(var(--_size) * 0.18)
|
|
159
|
+
color-mix(in oklch, var(--_body), black 45%),
|
|
160
|
+
inset 0 calc(var(--_size) * 0.08) calc(var(--_size) * 0.14)
|
|
161
|
+
color-mix(in oklch, var(--_body), white 25%),
|
|
162
|
+
/* coloured bloom, scaled by value so it only glows when lit */
|
|
163
|
+
0 0 calc(var(--_size) * 0.6 * var(--value, 0)) calc(var(--_size) * 0.12 * var(--value, 0))
|
|
164
|
+
var(--_colour),
|
|
165
|
+
0 0 calc(var(--_size) * 1.7 * var(--value, 0)) calc(var(--_size) * 0.5 * var(--value, 0))
|
|
166
|
+
color-mix(in oklch, var(--_colour), transparent 45%);
|
|
167
|
+
transition:
|
|
168
|
+
background var(--transition-duration, 150ms) ease-out,
|
|
169
|
+
box-shadow var(--transition-duration, 150ms) ease-out;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* Specular highlight blob near the top-left. */
|
|
173
|
+
:host([glow]) div::after {
|
|
174
|
+
content: "";
|
|
175
|
+
position: absolute;
|
|
176
|
+
inset: 0;
|
|
177
|
+
border-radius: 50%;
|
|
178
|
+
background: radial-gradient(ellipse 55% 45% at 30% 22%,
|
|
179
|
+
color-mix(in oklch, white, transparent 10%) 0%,
|
|
180
|
+
transparent 60%);
|
|
181
|
+
pointer-events: none;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* Pulse mode animates --value frame-by-frame, so drop the CSS transition
|
|
185
|
+
that would otherwise smear the envelope. Placed last to win over the
|
|
186
|
+
glow rule for elements matching both. */
|
|
187
|
+
:host([mode="pulse"]) div {
|
|
188
|
+
transition: none;
|
|
189
|
+
}
|
|
67
190
|
`;
|
|
68
191
|
}
|
|
69
192
|
};
|
|
@@ -74,6 +197,15 @@ __decorate([property({
|
|
|
74
197
|
reflect: true
|
|
75
198
|
})], LedElement.prototype, "lit", void 0);
|
|
76
199
|
__decorate([property({ type: String })], LedElement.prototype, "color", void 0);
|
|
200
|
+
__decorate([property({
|
|
201
|
+
type: Boolean,
|
|
202
|
+
attribute: `glow`,
|
|
203
|
+
reflect: true
|
|
204
|
+
})], LedElement.prototype, "glow", void 0);
|
|
205
|
+
__decorate([property({
|
|
206
|
+
type: String,
|
|
207
|
+
reflect: true
|
|
208
|
+
})], LedElement.prototype, "mode", void 0);
|
|
77
209
|
__decorate([property({
|
|
78
210
|
type: Boolean,
|
|
79
211
|
attribute: `blinking`,
|
|
@@ -83,6 +215,18 @@ __decorate([property({
|
|
|
83
215
|
type: Number,
|
|
84
216
|
attribute: `rate`
|
|
85
217
|
})], LedElement.prototype, "rate", void 0);
|
|
218
|
+
__decorate([property({
|
|
219
|
+
type: Number,
|
|
220
|
+
attribute: `attack-time`
|
|
221
|
+
})], LedElement.prototype, "attackTime", void 0);
|
|
222
|
+
__decorate([property({
|
|
223
|
+
type: Number,
|
|
224
|
+
attribute: `release-time`
|
|
225
|
+
})], LedElement.prototype, "releaseTime", void 0);
|
|
226
|
+
__decorate([property({
|
|
227
|
+
type: Boolean,
|
|
228
|
+
attribute: `pulse-retrigger`
|
|
229
|
+
})], LedElement.prototype, "pulseRetrigger", void 0);
|
|
86
230
|
LedElement = __decorate([safeCustomElement(`ixfx-led`)], LedElement);
|
|
87
231
|
//#endregion
|
|
88
232
|
export { LedElement };
|
package/dist/led.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"led.js","names":["#updateBlinking","#stopBlinking","#blinkInterval","customElement"],"sources":["../src/led/led.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { safeCustomElement as customElement } from \"../util/custom-elements.js\";\n\n@customElement(`ixfx-led`)\nexport class LedElement extends LitElement {\n @property({ type: Number })\n value = 0;\n\n @property({ type: Boolean, attribute: `lit`, reflect: true })\n lit = false;\n\n @property({ type: String })\n color = `oklch(50% 0.15 25)`;\n\n @property({ type: Boolean, attribute: `blinking`, reflect: true })\n blinking = false;\n\n @property({ type: Number, attribute: `rate` })\n rate = 500;\n\n #blinkInterval: number | undefined;\n\n willUpdate(changedProperties: Map<string, unknown>) {\n if (changedProperties.has(`lit`)) {\n this.value = this.lit ? 1 : 0;\n }\n\n if (changedProperties.has(`value`) || changedProperties.has(`lit`)) {\n this.style.setProperty(`--value`, String(this.value));\n }\n\n if (changedProperties.has(`blinking`) || changedProperties.has(`rate`)) {\n this.#updateBlinking();\n }\n\n if (changedProperties.has(`rate`)) {\n const transitionMs = this.rate < 300 ? this.rate * 0.5 : 150;\n this.style.setProperty(`--transition-duration`, `${transitionMs}ms`);\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#stopBlinking();\n }\n\n #updateBlinking() {\n if (this.blinking && this.rate > 0) {\n this.#stopBlinking();\n this.#blinkInterval = window.setInterval(() => {\n this.value = this.value === 0 ? 1 : 0;\n }, this.rate);\n } else {\n this.#stopBlinking();\n this.value = 0;\n }\n }\n\n #stopBlinking() {\n if (this.#blinkInterval !== undefined) {\n clearInterval(this.#blinkInterval);\n this.#blinkInterval = undefined;\n }\n }\n\n protected render() {\n return html`<div part=\"circle\"></div>`;\n }\n\n static styles = css`\n :host {\n --_size: var(--size, 1ex);\n display: inline-block;\n min-width: 1ex;\n min-height: 1ex;\n width: var(--_size);\n height: var(--_size);\n vertical-align: middle;\n }\n\n div {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background: color-mix(in oklch, var(--colour, oklch(50% 0.15 25)), white calc((1 - var(--value, 0)) * 50%));\n transition: background var(--transition-duration, 150ms) ease-out;\n }\n `;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-led\": LedElement;\n }\n}\n"],"mappings":";;;;AAKO,IAAM,aAAN,MAAM,mBAAmB,WAAW;;;EAEjC,KAAA,QAAA;EAGF,KAAA,MAAA;EAGE,KAAA,QAAA;EAGG,KAAA,WAAA;EAGJ,KAAA,OAAA;;CAEP;CAEA,WAAW,mBAAyC;EAClD,IAAI,kBAAkB,IAAI,KAAK,GAC7B,KAAK,QAAQ,KAAK,MAAM,IAAI;EAG9B,IAAI,kBAAkB,IAAI,OAAO,KAAK,kBAAkB,IAAI,KAAK,GAC/D,KAAK,MAAM,YAAY,WAAW,OAAO,KAAK,KAAK,CAAC;EAGtD,IAAI,kBAAkB,IAAI,UAAU,KAAK,kBAAkB,IAAI,MAAM,GACnE,KAAKA,gBAAgB;EAGvB,IAAI,kBAAkB,IAAI,MAAM,GAAG;GACjC,MAAM,eAAe,KAAK,OAAO,MAAM,KAAK,OAAO,KAAM;GACzD,KAAK,MAAM,YAAY,yBAAyB,GAAG,aAAa,GAAG;EACrE;CACF;CAEA,uBAAuB;EACrB,MAAM,qBAAqB;EAC3B,KAAKC,cAAc;CACrB;CAEA,kBAAkB;EAChB,IAAI,KAAK,YAAY,KAAK,OAAO,GAAG;GAClC,KAAKA,cAAc;GACnB,KAAKC,iBAAiB,OAAO,kBAAkB;IAC7C,KAAK,QAAQ,KAAK,UAAU,IAAI,IAAI;GACtC,GAAG,KAAK,IAAI;EACd,OAAO;GACL,KAAKD,cAAc;GACnB,KAAK,QAAQ;EACf;CACF;CAEA,gBAAgB;EACd,IAAI,KAAKC,mBAAmB,KAAA,GAAW;GACrC,cAAc,KAAKA,cAAc;GACjC,KAAKA,iBAAiB,KAAA;EACxB;CACF;CAEA,SAAmB;EACjB,OAAO,IAAI;CACb;;EAEgB,KAAA,SAAA,GAAG;;;;;;;;;;;;;;;;;;;;AAmBrB;AAnFG,WAAA,CAAA,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,WAAA,WAAA,SAAA,KAAA,CAAA;AAGzB,WAAA,CAAA,SAAS;CAAE,MAAM;CAAS,WAAW;CAAO,SAAS;AAAK,CAAC,CAAA,GAAA,WAAA,WAAA,OAAA,KAAA,CAAA;AAG3D,WAAA,CAAA,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,WAAA,WAAA,SAAA,KAAA,CAAA;AAGzB,WAAA,CAAA,SAAS;CAAE,MAAM;CAAS,WAAW;CAAY,SAAS;AAAK,CAAC,CAAA,GAAA,WAAA,WAAA,YAAA,KAAA,CAAA;AAGhE,WAAA,CAAA,SAAS;CAAE,MAAM;CAAQ,WAAW;AAAO,CAAC,CAAA,GAAA,WAAA,WAAA,QAAA,KAAA,CAAA;AAd9CC,aAAAA,WAAAA,CAAAA,kBAAc,UAAU,CAAA,GAAA,UAAA"}
|
|
1
|
+
{"version":3,"file":"led.js","names":["#pulseFrom","#pulsePeak","#pulseStart","#pulseLevel","#pulseRaf","#pulseTick","#appliedMode","#onModeChange","#updateBlinking","#stopBlinking","#stopPulse","#blinkInterval","customElement"],"sources":["../src/led/led.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { safeCustomElement as customElement } from \"../util/custom-elements.js\";\n\nexport type LedMode = `brightness` | `blink` | `pulse`;\n\n@customElement(`ixfx-led`)\nexport class LedElement extends LitElement {\n @property({ type: Number })\n value = 0;\n\n @property({ type: Boolean, attribute: `lit`, reflect: true })\n lit = false;\n\n @property({ type: String })\n color = `oklch(50% 0.15 25)`;\n\n @property({ type: Boolean, attribute: `glow`, reflect: true })\n glow = false;\n\n /**\n * Operating mode:\n * - `brightness` (default): {@link value} sets the LED brightness directly\n * - `blink`: LED blinks on/off every {@link rate} milliseconds (this mode\n * is what the legacy `blinking` attribute now selects)\n * - `pulse`: LED sits unlit until {@link pulse} is called, which fires an\n * attack/release envelope up to {@link value} and back down\n */\n @property({ type: String, reflect: true })\n mode: LedMode = `brightness`;\n\n /**\n * Legacy alias for `mode=\"blink\"`. Setting `blinking` switches {@link mode}\n * to `blink`; clearing it returns to `brightness`.\n */\n @property({ type: Boolean, attribute: `blinking`, reflect: true })\n blinking = false;\n\n @property({ type: Number, attribute: `rate` })\n rate = 500;\n\n /** Pulse-mode attack time in milliseconds (0 → instant). */\n @property({ type: Number, attribute: `attack-time` })\n attackTime = 40;\n\n /** Pulse-mode release/decay time in milliseconds (0 → instant). */\n @property({ type: Number, attribute: `release-time` })\n releaseTime = 400;\n\n /**\n * Pulse-mode retrigger behaviour. When set, each {@link pulse} call restarts\n * the envelope from 0. When unset (default), the attack ramps from wherever\n * the envelope currently sits, so a retrigger mid-decay is continuous.\n */\n @property({ type: Boolean, attribute: `pulse-retrigger` })\n pulseRetrigger = false;\n\n #blinkInterval: number | undefined;\n #appliedMode: LedMode = `brightness`;\n\n #pulseRaf: number | undefined;\n #pulseStart = 0;\n #pulsePeak = 0;\n #pulseFrom = 0;\n #pulseLevel = 0;\n\n willUpdate(changedProperties: Map<string, unknown>) {\n // `blinking` is a compatibility alias for mode=\"blink\".\n if (changedProperties.has(`blinking`)) {\n if (this.blinking) {\n this.mode = `blink`;\n } else if (this.mode === `blink`) {\n this.mode = `brightness`;\n }\n }\n\n // Handle a mode change (including one triggered by `blinking`, above, in\n // this same update). `#appliedMode` is compared directly rather than via\n // `changedProperties` so a same-pass change is still caught.\n if (this.mode !== this.#appliedMode) {\n this.#appliedMode = this.mode;\n this.#onModeChange();\n }\n\n if (changedProperties.has(`lit`)) {\n // Map `lit` onto `value`, but don't let the initial (undefined -> false)\n // change clobber an explicit `value` attribute.\n if (this.lit) {\n this.value = 1;\n } else if (changedProperties.get(`lit`) !== undefined) {\n this.value = 0;\n }\n }\n\n if (changedProperties.has(`color`)) {\n this.style.setProperty(`--_color-attr`, this.color);\n }\n\n // In pulse mode `--value` is driven by the envelope, not by `value`.\n if (\n this.mode !== `pulse`\n && (changedProperties.has(`value`) || changedProperties.has(`lit`))\n ) {\n this.style.setProperty(`--value`, String(this.value));\n }\n\n if (changedProperties.has(`rate`)) {\n this.#updateBlinking();\n const transitionMs = this.rate < 300 ? this.rate * 0.5 : 150;\n this.style.setProperty(`--transition-duration`, `${transitionMs}ms`);\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#stopBlinking();\n this.#stopPulse();\n }\n\n /**\n * Pulse-mode trigger: lights the LED to {@link value} using an attack/release\n * envelope, then decays back to unlit. Calling again restarts the envelope\n * (from 0 if {@link pulseRetrigger} is set, otherwise from the current level).\n * No-op unless {@link mode} is `pulse`.\n */\n pulse() {\n if (this.mode !== `pulse`)\n return;\n this.#pulsePeak = this.value;\n this.#pulseFrom = this.pulseRetrigger ? 0 : this.#pulseLevel;\n this.#pulseStart = performance.now();\n if (this.#pulseRaf === undefined) {\n this.#pulseRaf = requestAnimationFrame(this.#pulseTick);\n }\n }\n\n #onModeChange() {\n this.#stopPulse();\n this.#pulseLevel = 0;\n this.blinking = this.mode === `blink`;\n this.#updateBlinking();\n this.style.setProperty(\n `--value`,\n this.mode === `pulse` ? `0` : String(this.value),\n );\n }\n\n #pulseTick = (now: number) => {\n const attack = Math.max(0, this.attackTime);\n const release = Math.max(0, this.releaseTime);\n const from = this.#pulseFrom;\n const peak = this.#pulsePeak;\n const elapsed = now - this.#pulseStart;\n\n let level: number;\n if (attack > 0 && elapsed < attack) {\n // Ramp from the envelope's starting level up to the peak.\n level = from + (peak - from) * (elapsed / attack);\n } else if (elapsed < attack + release) {\n level = release > 0 ? peak * (1 - (elapsed - attack) / release) : 0;\n } else {\n level = 0;\n }\n level = Math.max(0, Math.min(Math.max(from, peak), level));\n this.#pulseLevel = level;\n this.style.setProperty(`--value`, String(level));\n\n if (elapsed < attack + release) {\n this.#pulseRaf = requestAnimationFrame(this.#pulseTick);\n } else {\n this.#pulseRaf = undefined;\n this.#pulseLevel = 0;\n }\n };\n\n #stopPulse() {\n if (this.#pulseRaf !== undefined) {\n cancelAnimationFrame(this.#pulseRaf);\n this.#pulseRaf = undefined;\n }\n }\n\n #updateBlinking() {\n const wasBlinking = this.#blinkInterval !== undefined;\n this.#stopBlinking();\n if (this.mode === `blink` && this.rate > 0) {\n this.#blinkInterval = window.setInterval(() => {\n this.value = this.value === 0 ? 1 : 0;\n }, this.rate);\n } else if (wasBlinking || this.mode === `blink`) {\n // Leaving blink mode (or blink with rate 0): settle to off.\n this.value = 0;\n }\n }\n\n #stopBlinking() {\n if (this.#blinkInterval !== undefined) {\n clearInterval(this.#blinkInterval);\n this.#blinkInterval = undefined;\n }\n }\n\n protected render() {\n return html`<div part=\"circle\"></div>`;\n }\n\n static styles = css`\n :host {\n --_size: var(--size, 1ex);\n /* Resolved colour: explicit --colour wins, then the \\`color\\` attribute, then a default. */\n --_colour: var(--colour, var(--_color-attr, oklch(50% 0.15 25)));\n display: inline-block;\n min-width: 1ex;\n min-height: 1ex;\n width: var(--_size);\n height: var(--_size);\n vertical-align: middle;\n }\n\n div {\n position: relative;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background: color-mix(in oklch, var(--_colour), white calc((1 - var(--value, 0)) * 50%));\n transition: background var(--transition-duration, 150ms) ease-out;\n }\n\n /* Glow: a more realistic domed LED with a specular highlight and coloured bloom. */\n :host([glow]) {\n /* Body darkens toward black as the LED dims, so an unlit LED reads as a dark dome. */\n --_body: color-mix(in oklch, var(--_colour), black calc((1 - var(--value, 0)) * 60%));\n overflow: visible;\n }\n\n :host([glow]) div {\n background:\n radial-gradient(circle at 32% 28%,\n color-mix(in oklch, var(--_body), white 55%) 0%,\n var(--_body) 45%,\n color-mix(in oklch, var(--_body), black 32%) 100%);\n box-shadow:\n /* inner rim shading for depth */\n inset 0 calc(var(--_size) * -0.1) calc(var(--_size) * 0.18)\n color-mix(in oklch, var(--_body), black 45%),\n inset 0 calc(var(--_size) * 0.08) calc(var(--_size) * 0.14)\n color-mix(in oklch, var(--_body), white 25%),\n /* coloured bloom, scaled by value so it only glows when lit */\n 0 0 calc(var(--_size) * 0.6 * var(--value, 0)) calc(var(--_size) * 0.12 * var(--value, 0))\n var(--_colour),\n 0 0 calc(var(--_size) * 1.7 * var(--value, 0)) calc(var(--_size) * 0.5 * var(--value, 0))\n color-mix(in oklch, var(--_colour), transparent 45%);\n transition:\n background var(--transition-duration, 150ms) ease-out,\n box-shadow var(--transition-duration, 150ms) ease-out;\n }\n\n /* Specular highlight blob near the top-left. */\n :host([glow]) div::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: 50%;\n background: radial-gradient(ellipse 55% 45% at 30% 22%,\n color-mix(in oklch, white, transparent 10%) 0%,\n transparent 60%);\n pointer-events: none;\n }\n\n /* Pulse mode animates --value frame-by-frame, so drop the CSS transition\n that would otherwise smear the envelope. Placed last to win over the\n glow rule for elements matching both. */\n :host([mode=\"pulse\"]) div {\n transition: none;\n }\n `;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-led\": LedElement;\n }\n}\n"],"mappings":"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"}
|
package/dist/miller.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-Bc23SI94.js";
|
|
2
2
|
import { a as TreeComponent, c as TreeExpandEvent, d as TreeSearchHost, f as TreeSelectDetail, g as TreeDataModel, h as TreeTickleEvent, i as TreeCollapseEvent, l as TreeItemClickDetail, m as TreeTickleDetail, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeSelectEvent, r as TreeCollapseDetail, s as TreeExpandDetail, t as TreeActivateDetail, u as TreeItemClickEvent } from "./tree-component-F6qZ0Gdv.js";
|
|
3
|
-
import {
|
|
3
|
+
import { S as ListSearchController } from "./index-h6gxtfHH.js";
|
|
4
4
|
import { n as TickledController } from "./tickled-controller-Bn3YdQsM.js";
|
|
5
5
|
import { LitElement, PropertyValues, TemplateResult, nothing } from "lit";
|
|
6
6
|
import { CommandRegistry } from "@clinth/ui-commands";
|
package/dist/miller.js
CHANGED
|
@@ -2,7 +2,7 @@ import { t as TickledController } from "./tickled-controller-C66DgJHl.js";
|
|
|
2
2
|
import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-BrAHEj1q.js";
|
|
3
3
|
import { t as themeFallbacks } from "./fallbacks-DNI9xt0F.js";
|
|
4
4
|
import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
|
|
5
|
-
import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-
|
|
5
|
+
import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-C05WjbZh.js";
|
|
6
6
|
import "./interaction-Cr13azbM.js";
|
|
7
7
|
import { t as collectDataResult } from "./data-provider-35TyWclX.js";
|
|
8
8
|
import { LitElement, css, html, nothing } from "lit";
|
package/dist/narrowed-text.js
CHANGED
|
@@ -3,7 +3,7 @@ import { t as TickledController } from "./tickled-controller-C66DgJHl.js";
|
|
|
3
3
|
import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-BrAHEj1q.js";
|
|
4
4
|
import { t as themeFallbacks } from "./fallbacks-DNI9xt0F.js";
|
|
5
5
|
import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
|
|
6
|
-
import {
|
|
6
|
+
import { p as createIncrSearch } from "./incr-search-C05WjbZh.js";
|
|
7
7
|
import "./interaction-Cr13azbM.js";
|
|
8
8
|
import { LitElement, css, html, nothing } from "lit";
|
|
9
9
|
import { property, query, state } from "lit/decorators.js";
|
package/dist/panel.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as TitlebarToggleDetail, c as TitlebarVariant, i as TitlebarOrientation, o as TitlebarToggleEvent, s as TitlebarToggleInteraction, t as TitlebarCloseEvent } from "./titlebar-
|
|
1
|
+
import { a as TitlebarToggleDetail, c as TitlebarVariant, i as TitlebarOrientation, o as TitlebarToggleEvent, s as TitlebarToggleInteraction, t as TitlebarCloseEvent } from "./titlebar-YQ-jVQoS.js";
|
|
2
2
|
import { LitElement } from "lit";
|
|
3
3
|
//#region src/panel/panel.d.ts
|
|
4
4
|
/** Backwards-compatible aliases: canonical types now live in `../titlebar/titlebar.js`. */
|
|
@@ -24,6 +24,8 @@ declare class PanelElement extends LitElement {
|
|
|
24
24
|
variant: PanelVariant;
|
|
25
25
|
/** Suppress the titlebar entirely (content-only chrome, e.g. dock tabbed mode). */
|
|
26
26
|
hideTitlebar: boolean;
|
|
27
|
+
/** Keep the toolbar visible even when the panel is collapsed. */
|
|
28
|
+
keepToolbar: boolean;
|
|
27
29
|
private _onTitlebarToggle;
|
|
28
30
|
private _onCloseClick;
|
|
29
31
|
protected render(): import("lit").TemplateResult<1>;
|
package/dist/panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","names":[],"sources":["../src/panel/panel.ts"],"mappings":";;;;KAgBY,mBAAmB;KACnB,eAAe;KACf,yBAAyB;KACzB,oBAAoB;KACpB,mBAAmB;KACnB,kBAAkB;UAEb;EACf,QAAQ;EACR,OAAO;;cAII,qBAAqB;EACY;EACyB,aAAa;EACrD;;EAEe;EAChB;EACwB;EACS,mBAAmB;EACf,SAAS;;EAEjB;
|
|
1
|
+
{"version":3,"file":"panel.d.ts","names":[],"sources":["../src/panel/panel.ts"],"mappings":";;;;KAgBY,mBAAmB;KACnB,eAAe;KACf,yBAAyB;KACzB,oBAAoB;KACpB,mBAAmB;KACnB,kBAAkB;UAEb;EACf,QAAQ;EACR,OAAO;;cAII,qBAAqB;EACY;EACyB,aAAa;EACrD;;EAEe;EAChB;EACwB;EACS,mBAAmB;EACf,SAAS;;EAEjB;;EAED;UAEhD;UAYA;YAWW,wBAAM;SA8BT,sBAAM;;QAmHhB;YACI;IACR,cAAc;;;UAID;EACf,oBAAoB,gBAAgB,sBAClC,MAAM,GACN,WAAW,MAAM,cAAc,OAAO,qBAAqB,aAC3D,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB"}
|
package/dist/panel.js
CHANGED
|
@@ -16,6 +16,7 @@ let PanelElement = class PanelElement extends LitElement {
|
|
|
16
16
|
this.toggleInteraction = `implicit`;
|
|
17
17
|
this.variant = `titlebar`;
|
|
18
18
|
this.hideTitlebar = false;
|
|
19
|
+
this.keepToolbar = false;
|
|
19
20
|
}
|
|
20
21
|
_onTitlebarToggle(event) {
|
|
21
22
|
event.stopPropagation();
|
|
@@ -35,6 +36,7 @@ let PanelElement = class PanelElement extends LitElement {
|
|
|
35
36
|
this.remove();
|
|
36
37
|
}
|
|
37
38
|
render() {
|
|
39
|
+
const showToolbar = this.keepToolbar || !this.collapsed;
|
|
38
40
|
return html`
|
|
39
41
|
${this.hideTitlebar ? nothing : html`
|
|
40
42
|
<ixfx-titlebar
|
|
@@ -49,7 +51,7 @@ let PanelElement = class PanelElement extends LitElement {
|
|
|
49
51
|
@toggle=${this._onTitlebarToggle}
|
|
50
52
|
@close=${this._onCloseClick}
|
|
51
53
|
>
|
|
52
|
-
|
|
54
|
+
${showToolbar ? html`<slot name="toolbar" slot="toolbar"></slot>` : nothing}
|
|
53
55
|
</ixfx-titlebar>
|
|
54
56
|
`}
|
|
55
57
|
|
|
@@ -149,6 +151,30 @@ let PanelElement = class PanelElement extends LitElement {
|
|
|
149
151
|
:host([variant="midline"][orientation="vertical"]) .content-wrapper {
|
|
150
152
|
background: transparent;
|
|
151
153
|
}
|
|
154
|
+
|
|
155
|
+
/* === Tree variant: VS Code explorer / Outline style === */
|
|
156
|
+
|
|
157
|
+
:host([variant="tree"]) {
|
|
158
|
+
border: none !important;
|
|
159
|
+
border-radius: 0 !important;
|
|
160
|
+
background: transparent;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
:host([variant="tree"]) .content-inner {
|
|
164
|
+
box-shadow: none;
|
|
165
|
+
background: transparent;
|
|
166
|
+
padding: 0;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
:host([variant="tree"]) .content-wrapper {
|
|
170
|
+
background: transparent;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
:host([variant="tree"][orientation="vertical"]) .content-inner {
|
|
174
|
+
width: max-content;
|
|
175
|
+
height: 100%;
|
|
176
|
+
transform: none;
|
|
177
|
+
}
|
|
152
178
|
`];
|
|
153
179
|
}
|
|
154
180
|
};
|
|
@@ -184,6 +210,10 @@ __decorate([property({
|
|
|
184
210
|
type: Boolean,
|
|
185
211
|
attribute: `hide-titlebar`
|
|
186
212
|
})], PanelElement.prototype, "hideTitlebar", void 0);
|
|
213
|
+
__decorate([property({
|
|
214
|
+
type: Boolean,
|
|
215
|
+
attribute: `keep-toolbar`
|
|
216
|
+
})], PanelElement.prototype, "keepToolbar", void 0);
|
|
187
217
|
PanelElement = __decorate([safeCustomElement(`ixfx-panel`)], PanelElement);
|
|
188
218
|
//#endregion
|
|
189
219
|
export { PanelElement };
|
package/dist/panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.js","names":["customElement"],"sources":["../src/panel/panel.ts"],"sourcesContent":["/* eslint-disable ts/no-unsafe-declaration-merging */\nimport type {\n TitlebarCloseEvent,\n TitlebarOrientation,\n TitlebarToggleDetail,\n TitlebarToggleEvent,\n TitlebarToggleInteraction,\n TitlebarVariant,\n} from '../titlebar/titlebar.js';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\nimport '../titlebar/titlebar.js';\n\n/** Backwards-compatible aliases: canonical types now live in `../titlebar/titlebar.js`. */\nexport type PanelOrientation = TitlebarOrientation;\nexport type PanelVariant = TitlebarVariant;\nexport type PanelToggleInteraction = TitlebarToggleInteraction;\nexport type PanelToggleDetail = TitlebarToggleDetail;\nexport type PanelToggleEvent = TitlebarToggleEvent;\nexport type PanelCloseEvent = TitlebarCloseEvent;\n\nexport interface PanelElementEventMap {\n toggle: PanelToggleEvent;\n close: PanelCloseEvent;\n}\n\n@customElement(`ixfx-panel`)\nexport class PanelElement extends LitElement {\n @property({ type: Boolean, reflect: true }) collapsed = false;\n @property({ type: String, attribute: `orientation`, reflect: true }) orientation: PanelOrientation = `horizontal`;\n @property({ type: Boolean }) closable = false;\n /** Show the collapse/expand caret and enable toggle behaviour. Defaults to true so existing panels stay collapsible. */\n @property({ type: Boolean, reflect: true }) collapsible = true;\n @property({ type: String }) title = ``;\n @property({ type: String, attribute: `icon-name` }) iconName = ``;\n @property({ type: String, attribute: `toggle-interaction` }) toggleInteraction: PanelToggleInteraction = `implicit`;\n @property({ type: String, attribute: `variant`, reflect: true }) variant: PanelVariant = `titlebar`;\n /** Suppress the titlebar entirely (content-only chrome, e.g. dock tabbed mode). */\n @property({ type: Boolean, attribute: `hide-titlebar` }) hideTitlebar = false;\n\n private _onTitlebarToggle(event: TitlebarToggleEvent) {\n event.stopPropagation();\n this.collapsed = event.detail.collapsed;\n this.dispatchEvent(\n new CustomEvent<PanelToggleDetail>(`toggle`, {\n detail: { collapsed: this.collapsed },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _onCloseClick(event: Event) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<void>(`close`, {\n bubbles: true,\n composed: true,\n }),\n );\n this.remove();\n }\n\n protected override render() {\n return html`\n ${this.hideTitlebar\n ? nothing\n : html`\n <ixfx-titlebar\n .title=${this.title}\n .iconName=${this.iconName}\n .orientation=${this.orientation}\n .variant=${this.variant}\n .closable=${this.closable}\n .collapsible=${this.collapsible}\n .collapsed=${this.collapsed}\n .toggleInteraction=${this.toggleInteraction}\n @toggle=${this._onTitlebarToggle}\n @close=${this._onCloseClick}\n >\n
|
|
1
|
+
{"version":3,"file":"panel.js","names":["customElement"],"sources":["../src/panel/panel.ts"],"sourcesContent":["/* eslint-disable ts/no-unsafe-declaration-merging */\nimport type {\n TitlebarCloseEvent,\n TitlebarOrientation,\n TitlebarToggleDetail,\n TitlebarToggleEvent,\n TitlebarToggleInteraction,\n TitlebarVariant,\n} from '../titlebar/titlebar.js';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\nimport '../titlebar/titlebar.js';\n\n/** Backwards-compatible aliases: canonical types now live in `../titlebar/titlebar.js`. */\nexport type PanelOrientation = TitlebarOrientation;\nexport type PanelVariant = TitlebarVariant;\nexport type PanelToggleInteraction = TitlebarToggleInteraction;\nexport type PanelToggleDetail = TitlebarToggleDetail;\nexport type PanelToggleEvent = TitlebarToggleEvent;\nexport type PanelCloseEvent = TitlebarCloseEvent;\n\nexport interface PanelElementEventMap {\n toggle: PanelToggleEvent;\n close: PanelCloseEvent;\n}\n\n@customElement(`ixfx-panel`)\nexport class PanelElement extends LitElement {\n @property({ type: Boolean, reflect: true }) collapsed = false;\n @property({ type: String, attribute: `orientation`, reflect: true }) orientation: PanelOrientation = `horizontal`;\n @property({ type: Boolean }) closable = false;\n /** Show the collapse/expand caret and enable toggle behaviour. Defaults to true so existing panels stay collapsible. */\n @property({ type: Boolean, reflect: true }) collapsible = true;\n @property({ type: String }) title = ``;\n @property({ type: String, attribute: `icon-name` }) iconName = ``;\n @property({ type: String, attribute: `toggle-interaction` }) toggleInteraction: PanelToggleInteraction = `implicit`;\n @property({ type: String, attribute: `variant`, reflect: true }) variant: PanelVariant = `titlebar`;\n /** Suppress the titlebar entirely (content-only chrome, e.g. dock tabbed mode). */\n @property({ type: Boolean, attribute: `hide-titlebar` }) hideTitlebar = false;\n /** Keep the toolbar visible even when the panel is collapsed. */\n @property({ type: Boolean, attribute: `keep-toolbar` }) keepToolbar = false;\n\n private _onTitlebarToggle(event: TitlebarToggleEvent) {\n event.stopPropagation();\n this.collapsed = event.detail.collapsed;\n this.dispatchEvent(\n new CustomEvent<PanelToggleDetail>(`toggle`, {\n detail: { collapsed: this.collapsed },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _onCloseClick(event: Event) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<void>(`close`, {\n bubbles: true,\n composed: true,\n }),\n );\n this.remove();\n }\n\n protected override render() {\n const showToolbar = this.keepToolbar || !this.collapsed;\n return html`\n ${this.hideTitlebar\n ? nothing\n : html`\n <ixfx-titlebar\n .title=${this.title}\n .iconName=${this.iconName}\n .orientation=${this.orientation}\n .variant=${this.variant}\n .closable=${this.closable}\n .collapsible=${this.collapsible}\n .collapsed=${this.collapsed}\n .toggleInteraction=${this.toggleInteraction}\n @toggle=${this._onTitlebarToggle}\n @close=${this._onCloseClick}\n >\n ${showToolbar ? html`<slot name=\"toolbar\" slot=\"toolbar\"></slot>` : nothing}\n </ixfx-titlebar>\n `}\n\n <div class=\"content-wrapper\" ?expanded=${!this.collapsed}>\n <div class=\"content-inner\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n static override styles = [themeFallbacks, css`\n :host {\n display: flex;\n flex-direction: column;\n background: var(--surface-3);\n border: var(--border-subtle);\n border-radius: var(--radius-m);\n overflow: hidden;\n box-sizing: border-box;\n }\n\n :host([orientation=\"vertical\"]) {\n flex-direction: row;\n align-self: flex-start;\n min-width: 0 !important;\n flex-shrink: 1;\n }\n\n ixfx-titlebar {\n flex-shrink: 0;\n }\n\n .content-wrapper {\n interpolate-size: allow-keywords;\n overflow: hidden;\n height: 0;\n transition: height var(--transition, 0.2s ease-out);\n background: var(--surface-3);\n }\n\n .content-wrapper[expanded] {\n height: auto;\n }\n\n :host([orientation=\"vertical\"]) .content-wrapper {\n height: unset;\n width: 0;\n transition: width var(--transition, 0.2s ease-out);\n }\n\n :host([orientation=\"vertical\"]) .content-wrapper[expanded] {\n width: auto;\n }\n\n .content-inner {\n box-shadow: var(--deboss-3);\n min-height: 0;\n min-width: 0;\n overflow: hidden;\n padding: var(--space-s);\n transform: translateY(-100%);\n transition: transform var(--transition, 0.2s ease-out);\n }\n\n .content-wrapper[expanded] .content-inner {\n transform: translateY(0);\n }\n\n :host([orientation=\"vertical\"]) .content-inner {\n width: max-content;\n height: 100%;\n transform: translateX(-100%);\n }\n\n :host([orientation=\"vertical\"]) .content-wrapper[expanded] .content-inner {\n transform: translateX(0);\n }\n\n /* === Midline variant (host + content only; bar chrome lives in ixfx-titlebar) === */\n\n :host([variant=\"midline\"]) {\n border: none !important;\n border-radius: 0 !important;\n background: transparent;\n }\n\n :host([variant=\"midline\"]) .content-inner {\n box-shadow: none;\n background: var(--surface-3);\n }\n\n :host([variant=\"midline\"]) .content-wrapper {\n background: transparent;\n }\n\n :host([variant=\"midline\"][orientation=\"vertical\"]) .content-wrapper {\n background: transparent;\n }\n\n /* === Tree variant: VS Code explorer / Outline style === */\n\n :host([variant=\"tree\"]) {\n border: none !important;\n border-radius: 0 !important;\n background: transparent;\n }\n\n :host([variant=\"tree\"]) .content-inner {\n box-shadow: none;\n background: transparent;\n padding: 0;\n }\n\n :host([variant=\"tree\"]) .content-wrapper {\n background: transparent;\n }\n\n :host([variant=\"tree\"][orientation=\"vertical\"]) .content-inner {\n width: max-content;\n height: 100%;\n transform: none;\n }\n `];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-panel': PanelElement;\n }\n}\n\nexport interface PanelElement {\n addEventListener: (<K extends keyof PanelElementEventMap>(\n type: K,\n listener: (this: PanelElement, event: PanelElementEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n ) => void) & ((\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void);\n}\n"],"mappings":";;;;;;AA6BO,IAAM,eAAN,MAAM,qBAAqB,WAAW;;;EACa,KAAA,YAAA;EAC6C,KAAA,cAAA;EAC7D,KAAA,WAAA;EAEkB,KAAA,cAAA;EACtB,KAAA,QAAA;EAC2B,KAAA,WAAA;EAC0C,KAAA,oBAAA;EAChB,KAAA,UAAA;EAEjB,KAAA,eAAA;EAEF,KAAA,cAAA;;CAEtE,kBAA0B,OAA4B;EACpD,MAAM,gBAAgB;EACtB,KAAK,YAAY,MAAM,OAAO;EAC9B,KAAK,cACH,IAAI,YAA+B,UAAU;GAC3C,QAAQ,EAAE,WAAW,KAAK,UAAU;GACpC,SAAS;GACT,UAAU;EACZ,CAAC,CACH;CACF;CAEA,cAAsB,OAAc;EAClC,MAAM,gBAAgB;EACtB,KAAK,cACH,IAAI,YAAkB,SAAS;GAC7B,SAAS;GACT,UAAU;EACZ,CAAC,CACH;EACA,KAAK,OAAO;CACd;CAEA,SAA4B;EAC1B,MAAM,cAAc,KAAK,eAAe,CAAC,KAAK;EAC9C,OAAO,IAAI;QACP,KAAK,eACH,UACA,IAAI;;mBAEK,KAAK,MAAM;sBACR,KAAK,SAAS;yBACX,KAAK,YAAY;qBACrB,KAAK,QAAQ;sBACZ,KAAK,SAAS;yBACX,KAAK,YAAY;uBACnB,KAAK,UAAU;+BACP,KAAK,kBAAkB;oBAClC,KAAK,kBAAkB;mBACxB,KAAK,cAAc;;YAE1B,cAAc,IAAI,gDAAgD,QAAQ;;UAE5E;;+CAEqC,CAAC,KAAK,UAAU;;;;;;CAM7D;;EAEyB,KAAA,SAAA,CAAC,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgH5C;;AACH;AApLG,WAAA,CAAA,SAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,aAAA,WAAA,aAAA,KAAA,CAAA;AACzC,WAAA,CAAA,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAe,SAAS;AAAK,CAAC,CAAA,GAAA,aAAA,WAAA,eAAA,KAAA,CAAA;AAClE,WAAA,CAAA,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAA,aAAA,WAAA,YAAA,KAAA,CAAA;AAE1B,WAAA,CAAA,SAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,aAAA,WAAA,eAAA,KAAA,CAAA;AACzC,WAAA,CAAA,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,aAAA,WAAA,SAAA,KAAA,CAAA;AACzB,WAAA,CAAA,SAAS;CAAE,MAAM;CAAQ,WAAW;AAAY,CAAC,CAAA,GAAA,aAAA,WAAA,YAAA,KAAA,CAAA;AACjD,WAAA,CAAA,SAAS;CAAE,MAAM;CAAQ,WAAW;AAAqB,CAAC,CAAA,GAAA,aAAA,WAAA,qBAAA,KAAA,CAAA;AAC1D,WAAA,CAAA,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAW,SAAS;AAAK,CAAC,CAAA,GAAA,aAAA,WAAA,WAAA,KAAA,CAAA;AAE9D,WAAA,CAAA,SAAS;CAAE,MAAM;CAAS,WAAW;AAAgB,CAAC,CAAA,GAAA,aAAA,WAAA,gBAAA,KAAA,CAAA;AAEtD,WAAA,CAAA,SAAS;CAAE,MAAM;CAAS,WAAW;AAAe,CAAC,CAAA,GAAA,aAAA,WAAA,eAAA,KAAA,CAAA;AAdvDA,eAAAA,WAAAA,CAAAA,kBAAc,YAAY,CAAA,GAAA,YAAA"}
|
package/dist/plots.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as
|
|
2
|
-
export { ColourMapConfig, ColourMode, ColourResult, PlotDataSeries, PlotDataSeriesOptions, PlotHistogram, PlotHistogramBucketClickDetail, PlotHistogramBucketClickEvent, PlotHistogramElementEventMap, PlotHistogramOrientation, PlotHistogramValueTooltips, PlotMultiAxis, PlotMultiAxisDataPointClickDetail, PlotMultiAxisDataPointClickEvent, PlotMultiAxisElementEventMap, PlotMultiAxisLayout, PlotSingleAxis, PlotSingleAxisElementEventMap, PlotSingleAxisPointerMoveDetail, PlotSingleAxisPointerMoveEvent, PlotXyAxis, SingleAxisAgeStyle, SingleAxisDrawStyle, XyAgeStyle, XyDrawStyle, applyAgeModification, computeColour, parseColourScaleAttr, readBaseColour };
|
|
1
|
+
import { A as readBaseColour, C as PlotDataSeriesOptions, D as applyAgeModification, E as ColourResult, O as computeColour, S as PlotDataSeries, T as ColourMode, _ as PlotSingleAxisElementEventMap, a as PlotHistogramBucketClickDetail, b as SingleAxisAgeStyle, c as PlotHistogramInteractionMode, d as PlotMultiAxis, f as PlotMultiAxisDataPointClickDetail, g as PlotSingleAxis, h as PlotMultiAxisLayout, i as PlotHistogram, k as parseColourScaleAttr, l as PlotHistogramOrientation, m as PlotMultiAxisElementEventMap, n as XyAgeStyle, o as PlotHistogramBucketClickEvent, p as PlotMultiAxisDataPointClickEvent, r as XyDrawStyle, s as PlotHistogramElementEventMap, t as PlotXyAxis, u as PlotHistogramValueTooltips, v as PlotSingleAxisPointerMoveDetail, w as ColourMapConfig, x as SingleAxisDrawStyle, y as PlotSingleAxisPointerMoveEvent } from "./xy-axis-BfP9hKLj.js";
|
|
2
|
+
export { ColourMapConfig, ColourMode, ColourResult, PlotDataSeries, PlotDataSeriesOptions, PlotHistogram, PlotHistogramBucketClickDetail, PlotHistogramBucketClickEvent, PlotHistogramElementEventMap, PlotHistogramInteractionMode, PlotHistogramOrientation, PlotHistogramValueTooltips, PlotMultiAxis, PlotMultiAxisDataPointClickDetail, PlotMultiAxisDataPointClickEvent, PlotMultiAxisElementEventMap, PlotMultiAxisLayout, PlotSingleAxis, PlotSingleAxisElementEventMap, PlotSingleAxisPointerMoveDetail, PlotSingleAxisPointerMoveEvent, PlotXyAxis, SingleAxisAgeStyle, SingleAxisDrawStyle, XyAgeStyle, XyDrawStyle, applyAgeModification, computeColour, parseColourScaleAttr, readBaseColour };
|
package/dist/plots.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { c as computeColour, i as PlotMultiAxis, l as parseColourScaleAttr, n as PlotSingleAxis, o as PlotDataSeries, r as PlotHistogram, s as applyAgeModification, t as PlotXyAxis, u as readBaseColour } from "./xy-axis-
|
|
1
|
+
import { c as computeColour, i as PlotMultiAxis, l as parseColourScaleAttr, n as PlotSingleAxis, o as PlotDataSeries, r as PlotHistogram, s as applyAgeModification, t as PlotXyAxis, u as readBaseColour } from "./xy-axis-DzM1brBZ.js";
|
|
2
2
|
export { PlotDataSeries, PlotHistogram, PlotMultiAxis, PlotSingleAxis, PlotXyAxis, applyAgeModification, computeColour, parseColourScaleAttr, readBaseColour };
|
|
@@ -2,7 +2,7 @@ import "./icon-CDGprSdE.js";
|
|
|
2
2
|
import { LitElement } from "lit";
|
|
3
3
|
//#region src/titlebar/titlebar.d.ts
|
|
4
4
|
type TitlebarOrientation = `horizontal` | `vertical`;
|
|
5
|
-
type TitlebarVariant = `titlebar` | `midline`;
|
|
5
|
+
type TitlebarVariant = `titlebar` | `midline` | `tree`;
|
|
6
6
|
type TitlebarToggleInteraction = `implicit` | `explicit` | `disabled`;
|
|
7
7
|
interface TitlebarToggleDetail {
|
|
8
8
|
readonly collapsed: boolean;
|
|
@@ -47,4 +47,4 @@ interface TitlebarElement {
|
|
|
47
47
|
}
|
|
48
48
|
//#endregion
|
|
49
49
|
export { TitlebarToggleDetail as a, TitlebarVariant as c, TitlebarOrientation as i, TitlebarElement as n, TitlebarToggleEvent as o, TitlebarElementEventMap as r, TitlebarToggleInteraction as s, TitlebarCloseEvent as t };
|
|
50
|
-
//# sourceMappingURL=titlebar-
|
|
50
|
+
//# sourceMappingURL=titlebar-YQ-jVQoS.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"titlebar-
|
|
1
|
+
{"version":3,"file":"titlebar-YQ-jVQoS.d.ts","names":[],"sources":["../src/titlebar/titlebar.ts"],"mappings":";;;KAOY;KACA;KACA;UAEK;WACN;;KAGC,sBAAsB,YAAY;KAClC,qBAAqB;UAEhB;EACf,QAAQ;EACR,OAAO;;;;;;;;;;cAYI,wBAAwB;EACP;EACwB;EACiB,aAAa;EACjB,SAAS;EAC7C;;EAEe;EACA;EACiB,mBAAmB;UAExE;UAaA;UASA;YAIW,wBAAM;SAkET,sBAAM;;QA0RhB;YACI;IACR,iBAAiB;;;UAIJ;EACf,oBAAoB,gBAAgB,yBAClC,MAAM,GACN,WAAW,MAAM,iBAAiB,OAAO,wBAAwB,aACjE,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB"}
|
package/dist/titlebar.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TitlebarToggleDetail, c as TitlebarVariant, i as TitlebarOrientation, n as TitlebarElement, o as TitlebarToggleEvent, r as TitlebarElementEventMap, s as TitlebarToggleInteraction, t as TitlebarCloseEvent } from "./titlebar-
|
|
1
|
+
import { a as TitlebarToggleDetail, c as TitlebarVariant, i as TitlebarOrientation, n as TitlebarElement, o as TitlebarToggleEvent, r as TitlebarElementEventMap, s as TitlebarToggleInteraction, t as TitlebarCloseEvent } from "./titlebar-YQ-jVQoS.js";
|
|
2
2
|
export { TitlebarCloseEvent, TitlebarElement, TitlebarElementEventMap, TitlebarOrientation, TitlebarToggleDetail, TitlebarToggleEvent, TitlebarToggleInteraction, TitlebarVariant };
|
package/dist/titlebar.js
CHANGED
|
@@ -40,12 +40,23 @@ let TitlebarElement = class TitlebarElement extends LitElement {
|
|
|
40
40
|
const showCaret = this.collapsible && this.toggleInteraction !== `disabled`;
|
|
41
41
|
const implicitToggle = this.collapsible && this.toggleInteraction === `implicit`;
|
|
42
42
|
const caretRotation = isVertical ? this.collapsed ? `` : `-90deg` : this.collapsed ? `-90deg` : ``;
|
|
43
|
+
const treeVariant = this.variant === `tree`;
|
|
43
44
|
return html`
|
|
44
45
|
<div
|
|
45
46
|
class="bar"
|
|
46
47
|
role="toolbar"
|
|
47
48
|
@click=${implicitToggle ? this._onToggleClick : nothing}
|
|
48
49
|
>
|
|
50
|
+
${treeVariant && showCaret ? html`
|
|
51
|
+
<button
|
|
52
|
+
class="caret-btn"
|
|
53
|
+
type="button"
|
|
54
|
+
aria-label=${this.collapsed ? `Expand panel` : `Collapse panel`}
|
|
55
|
+
@click=${this._onToggleClick}
|
|
56
|
+
>
|
|
57
|
+
<ixfx-icon name=${caretIcon} prominence .rotate=${caretRotation.length > 0 ? caretRotation : nothing}></ixfx-icon>
|
|
58
|
+
</button>
|
|
59
|
+
` : nothing}
|
|
49
60
|
<div class="title-text-wrapper">
|
|
50
61
|
${this.iconName ? html`<ixfx-icon class="title-icon" name=${this.iconName}></ixfx-icon>` : nothing}
|
|
51
62
|
<span class="title-text">${this.title}</span>
|
|
@@ -63,7 +74,7 @@ let TitlebarElement = class TitlebarElement extends LitElement {
|
|
|
63
74
|
<ixfx-icon name="close"></ixfx-icon>
|
|
64
75
|
</button>
|
|
65
76
|
` : nothing}
|
|
66
|
-
${showCaret ? html`
|
|
77
|
+
${!treeVariant && showCaret ? html`
|
|
67
78
|
<button
|
|
68
79
|
class="caret-btn"
|
|
69
80
|
type="button"
|
|
@@ -286,6 +297,77 @@ let TitlebarElement = class TitlebarElement extends LitElement {
|
|
|
286
297
|
-1px 0 0 var(--surface-5),
|
|
287
298
|
1px 0 0 var(--surface-1);
|
|
288
299
|
}
|
|
300
|
+
|
|
301
|
+
/* === Tree variant: VS Code explorer / Outline style === */
|
|
302
|
+
:host([variant="tree"]) .bar {
|
|
303
|
+
background: transparent;
|
|
304
|
+
padding: 0 var(--space-xs);
|
|
305
|
+
min-height: unset;
|
|
306
|
+
gap: var(--space-xs);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
:host([variant="tree"][orientation="vertical"]) .bar {
|
|
310
|
+
padding: var(--space-xs) 0;
|
|
311
|
+
flex-direction: column;
|
|
312
|
+
min-width: unset;
|
|
313
|
+
writing-mode: horizontal-tb;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
:host([variant="tree"]) .title-text-wrapper {
|
|
317
|
+
display: inline-flex;
|
|
318
|
+
align-items: center;
|
|
319
|
+
gap: var(--space-xs);
|
|
320
|
+
padding: 0;
|
|
321
|
+
background: transparent;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
:host([variant="tree"]) .title-icon {
|
|
325
|
+
background: transparent;
|
|
326
|
+
flex-shrink: 0;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
:host([variant="tree"]) .title-text {
|
|
330
|
+
font-weight: normal;
|
|
331
|
+
color: var(--surface-3-text);
|
|
332
|
+
padding: 0;
|
|
333
|
+
background: transparent;
|
|
334
|
+
box-shadow: none;
|
|
335
|
+
flex: unset;
|
|
336
|
+
width: auto;
|
|
337
|
+
white-space: nowrap;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
:host([variant="tree"][orientation="vertical"]) .title-text {
|
|
341
|
+
writing-mode: vertical-rl;
|
|
342
|
+
transform: rotate(180deg);
|
|
343
|
+
padding: 0;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
:host([variant="tree"]) .caret-btn {
|
|
347
|
+
background: transparent;
|
|
348
|
+
opacity: var(--prominence-idle-opacity);
|
|
349
|
+
padding: 0;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
:host([variant="tree"]) .caret-btn:hover {
|
|
353
|
+
background: transparent;
|
|
354
|
+
opacity: var(--prominence-tickled-opacity);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
:host([variant="tree"]) .toolbar {
|
|
358
|
+
margin-left: auto;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
:host([variant="tree"][orientation="vertical"]) .toolbar {
|
|
362
|
+
flex-direction: row;
|
|
363
|
+
margin-left: 0;
|
|
364
|
+
margin-top: auto;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
:host([variant="tree"]) ixfx-icon {
|
|
368
|
+
width: 1em;
|
|
369
|
+
height: 1em;
|
|
370
|
+
}
|
|
289
371
|
`];
|
|
290
372
|
}
|
|
291
373
|
};
|