@cxl/build 1.0.0-beta.7 → 1.0.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/spec-browser.js CHANGED
@@ -1,7 +1,1061 @@
1
- var d={},bt=Symbol("terminator");function he(t,e){let r=!1,n={error:o,unsubscribe:i,get closed(){return r},signal:new x,next(s){if(!r)try{t.next?.(s)}catch(c){o(c)}},complete(){if(!r)try{t.complete?.()}finally{i()}}};t.signal?.subscribe(i);function o(s){if(r)throw s;if(!t.error)throw i(),s;try{t.error(s)}finally{i()}}function i(){r||(r=!0,n.signal.next())}try{e?.(n)}catch(s){o(s)}return n}var l=class{__subscribe;constructor(e){this.__subscribe=e}then(e,r){return ye(this).then(e,r)}pipe(...e){return e.reduce((r,n)=>n(r),this)}subscribe(e){return he(!e||typeof e=="function"?{next:e}:e,this.__subscribe)}},g=class extends l{closed=!1;signal=new x;observers=new Set;constructor(){super(e=>this.onSubscribe(e))}next(e){if(!this.closed)for(let r of Array.from(this.observers))r.closed||r.next(e)}error(e){if(!this.closed){this.closed=!0;let r=!1,n;for(let o of Array.from(this.observers))try{o.error(e)}catch(i){r=!0,n=i}if(r)throw n}}complete(){this.closed||(this.closed=!0,Array.from(this.observers).forEach(e=>e.complete()),this.observers.clear())}onSubscribe(e){this.closed?e.complete():(this.observers.add(e),e.signal.subscribe(()=>this.observers.delete(e)))}},x=class extends l{closed=!1;observers=new Set;constructor(){super(e=>{this.closed?(e.next(),e.complete()):this.observers.add(e)})}next(){if(!this.closed){this.closed=!0;for(let e of Array.from(this.observers))e.closed||(e.next(),e.complete());this.observers.clear()}}},S=class extends g{queue=[];emitting=!1;next(e){if(!this.closed)if(this.emitting)this.queue.push(e);else{for(this.emitting=!0,super.next(e);this.queue.length;)super.next(this.queue.shift());this.emitting=!1}}},R=class extends g{currentValue;constructor(e){super(),this.currentValue=e}get value(){return this.currentValue}next(e){this.currentValue=e,super.next(e)}onSubscribe(e){let r=super.onSubscribe(e);return this.closed||e.next(this.currentValue),r}},M=class extends g{bufferSize;buffer=[];hasError=!1;lastError;constructor(e=1/0){super(),this.bufferSize=e}error(e){this.hasError=!0,this.lastError=e,super.error(e)}next(e){return this.buffer.length===this.bufferSize&&this.buffer.shift(),this.buffer.push(e),super.next(e)}onSubscribe(e){this.observers.add(e),this.buffer.forEach(r=>e.next(r)),this.hasError?e.error(this.lastError):this.closed&&e.complete(),e.signal.subscribe(()=>this.observers.delete(e))}},L=class extends g{$value=d;get hasValue(){return this.$value!==d}get value(){if(this.$value===d)throw new Error("Reference not initialized");return this.$value}next(e){return this.$value=e,super.next(e)}onSubscribe(e){!this.closed&&this.$value!==d&&e.next(this.$value),super.onSubscribe(e)}},O=class extends Error{message="No elements in sequence"};function H(...t){return new l(e=>{let r=0,n;function o(){let i=t[r++];i&&!e.closed?(n?.next(),i.subscribe({next:e.next,error:e.error,complete:o,signal:n=new x})):e.complete()}e.signal.subscribe(()=>n?.next()),o()})}function _(t){return new l(e=>{t().subscribe(e)})}function ge(t){return new l(e=>{for(let r of t)e.closed||e.next(r);e.complete()})}function $(...t){return ge(t)}function be(t){return new Promise((e,r)=>{let n=d;t.subscribe({next:o=>n=o,error:o=>r(o),complete:()=>e(n)})})}function ye(t){return be(t).then(e=>e===d?void 0:e)}function b(t,e){return f(r=>({next:t(r),unsubscribe:e}))}function f(t){return e=>new l(r=>{let n=t(r,e);r.signal.subscribe(()=>n.unsubscribe?.()),n.error||(n.error=r.error),n.complete||(n.complete=r.complete),n.signal=r.signal,e.subscribe(n)})}function V(t){return b(e=>r=>e.next(t(r)))}function we(t){let e=d;return b(r=>n=>{let o=t(n);o!==e&&(e=o,r.next(o))})}function ve(t,e){return f(r=>{let n=e,o=0;return{next(i){n=t(n,i,o++)},complete(){r.next(n),r.complete()}}})}function Ee(t){return f(e=>{let r=!0,n;return{next(o){r&&(r=!1,e.next(o),n=setTimeout(()=>r=!0,t))},unsubscribe:()=>clearTimeout(n)}})}function Fe(t){return new l(e=>{let r=setTimeout(()=>{e.next(),e.complete()},t);e.signal.subscribe(()=>clearTimeout(r))})}function Ce(t,e=Fe){return Q(r=>e(t).map(()=>r))}function Q(t){return e=>k(r=>{let n=!1,o=!1,i,s=()=>{i?.next(),n=!1,o&&r.complete()},c=new x;r.signal.subscribe(()=>{s(),c.next()}),e.subscribe({next(a){s(),i=new x,n=!0,t(a).subscribe({next:r.next,error:r.error,complete:s,signal:i})},error:r.error,complete(){o=!0,n||r.complete()},signal:c})})}function $e(t){return e=>k(r=>{let n=r.signal,o=0,i=0,s=!1;e.subscribe({next:c=>{o++,t(c).subscribe({next:r.next,error:r.error,complete:()=>{i++,s&&i===o&&r.complete()},signal:n})},error:r.error,complete(){s=!0,i===o&&r.complete()},signal:n})})}function ke(t){return f(e=>{let r=!0;return{next(n){r&&(r=!1,t(n).subscribe({next:e.next,error:e.error,complete:()=>r=!0,signal:e.signal}))}}})}function D(t){return b(e=>r=>{t(r)&&e.next(r)})}function Ae(t){return b(e=>r=>{t-- >0&&!e.closed&&e.next(r),(t<=0||e.closed)&&e.complete()})}function Se(t){return b(e=>r=>{!e.closed&&t(r)?e.next(r):e.complete()})}function De(){let t=!1;return f(e=>({next(r){t||(t=!0,e.next(r),e.complete())},complete(){e.closed||e.error(new O)}}))}function j(t){return b(e=>r=>{t(r),e.next(r)})}function Ie(t){return f((e,r)=>{let n,o={next:e.next,error(i){try{if(e.closed)return;let s=t(i,r);s&&(n?.next(),n=new x,s.subscribe({...o,signal:n}))}catch(s){e.error(s)}},unsubscribe:()=>n?.next()};return o})}function Pe(){return b(t=>{let e=d;return r=>{r!==e&&(e=r,t.next(r))}})}function Te(){return t=>{let e=new M(1),r=!1;return k(n=>{e.subscribe(n),r||(r=!0,t.subscribe(e))})}}function Ne(){return t=>{let e,r=0;function n(){--r===0&&e.signal.next()}return k(o=>{o.signal.subscribe(n),r++===0?(e=U(),e.subscribe(o),t.subscribe(e)):e.subscribe(o)})}}function ze(){return t=>{let e=new g,r,n,o=!1,i=!1;return k(s=>{i?(s.next(n),s.complete()):e.subscribe(s),r??=t.subscribe({next:c=>{o=!0,n=c},error:s.error,complete(){i=!0,o&&e.next(n),e.complete()},signal:s.signal})})}}function y(...t){return t.length===1?t[0]:new l(e=>{let r=t.length;for(let n of t)e.closed||n.subscribe({next:e.next,error:e.error,complete(){r--===1&&e.complete()},signal:e.signal})})}function Re(t){return f(e=>({next:e.next,unsubscribe:t}))}function Me(){return D(()=>!1)}var Z=new l(t=>t.complete());function ee(t){return new R(t)}function k(t){return new l(t)}function U(){return new L}var J={catchError:Ie,debounceTime:Ce,distinctUntilChanged:Pe,exhaustMap:ke,filter:D,finalize:Re,first:De,ignoreElements:Me,map:V,mergeMap:$e,publishLast:ze,reduce:ve,select:we,share:Ne,shareLatest:Te,switchMap:Q,take:Ae,takeWhile:Se,tap:j,throttleTime:Ee};for(let t in J)l.prototype[t]=function(...e){return this.pipe(J[t](...e))};function te(t,e,r){return new l(n=>{let o=n.next.bind(n);t.addEventListener(e,o,r),n.signal.subscribe(()=>t.removeEventListener(e,o,r))})}function Le(t){let e;return function(...r){e&&cancelAnimationFrame(e),e=requestAnimationFrame(()=>{t.apply(this,r),e=0})}}function re(t){return f(e=>{let r=Le(o=>{e.closed||(t&&t(o),e.next(o),n&&e.complete())}),n=!1;return{next:r,complete:()=>n=!0}})}function q(t,e,r){return n=>H($(t?n.matches(t):!1),te(n,e).switchMap(()=>y($(!0),te(n,r).map(()=>t?n.matches(t):!1))))}var Et=q("","animationstart","animationend"),Ft=q("","mouseenter","mouseleave"),Ct=q(":focus,:focus-within","focusin","focusout");var Oe=j(t=>console.trace(t));l.prototype.log=function(){return this.pipe(Oe)};l.prototype.raf=function(t){return this.pipe(re(t))};var u=Symbol("bindings"),He={},v=Symbol("augments"),w=Symbol("parser"),G=class{bindings;messageHandlers;internals;attributes$=new S;wasConnected=!1;wasInitialized=!1;subscriptions;prebind;addMessageHandler(e){(this.messageHandlers??=new Set).add(e)}removeMessageHandler(e){this.messageHandlers?.delete(e)}message(e,r){let n=!1;if(this.messageHandlers)for(let o of this.messageHandlers)o.type===e&&(o.next(r),n||=o.stopPropagation);return n}add(e){if(this.wasConnected)throw new Error("Cannot bind connected component.");this.wasInitialized?(this.bindings??=[]).push(e):(this.prebind??=[]).push(e)}connect(){if(this.wasConnected=!0,!this.subscriptions&&(this.prebind||this.bindings)){let e=this.subscriptions=[];if(this.bindings)for(let r of this.bindings)e.push(r.subscribe());if(this.prebind)for(let r of this.prebind)e.push(r.subscribe())}}disconnect(){this.subscriptions?.forEach(e=>e.unsubscribe()),this.subscriptions=void 0}},I=Symbol("css"),m=class extends HTMLElement{static observedAttributes;static[v];static[w];[u]=new G;[I];connectedCallback(){this[u].wasInitialized=!0,this[u].wasConnected||this.constructor[v]?.forEach(e=>e(this)),this[u].connect()}disconnectedCallback(){this[u].disconnect()}attributeChangedCallback(e,r,n){let o=this.constructor[w]?.[e]??_e;r!==n&&(this[e]=o(n,this[e]))}};function _e(t,e){let r=e===!1||e===!0;return t===""?r?!0:"":t===null?r?!1:void 0:t}function ne(t,e){t.hasOwnProperty(v)||(t[v]=t[v]?.slice(0)??[]),t[v]?.push(e)}var Ve={mode:"open"};function K(t){return t.shadowRoot??t.attachShadow(Ve)}function oe(t,e){e instanceof Node?K(t).appendChild(e):t[u].add(e)}function je(t,e){e.length&&ne(t,r=>{for(let n of e){let o=n.call(t,r);o&&o!==r&&oe(r,o)}})}function Ue(t,e){He[t]=e,customElements.define(t,e)}function ie(t,{init:e,augment:r,tagName:n}){if(e)for(let o of e)o(t);r&&je(t,r),n&&Ue(n,t)}function qe(t,e){return t[u].attributes$.pipe(D(r=>r.attribute===e),V(()=>t[e]))}function P(t,e){return y(qe(t,e),_(()=>$(t[e])))}function Ye(t){let e=t.observedAttributes;return e&&!t.hasOwnProperty("observedAttributes")&&(e=t.observedAttributes?.slice(0)),t.observedAttributes=e||[]}function se(t,e,r){return r===!1||r===null||r===void 0?r=null:r===!0&&(r=""),r===null?t.removeAttribute(e):t.setAttribute(e,String(r)),r}function Ge(t,e,r){t.hasOwnProperty(w)||(t[w]={...t[w]}),t[w]&&(t[w][e]=r)}function F(t,e){return r=>{e?.observe!==!1&&Ye(r).push(t),e?.parse&&Ge(r,t,e.parse);let n=`$$${t}`,o=r.prototype,i=Object.getOwnPropertyDescriptor(o,t);i&&Object.defineProperty(o,n,i);let s=e?.persist,c={enumerable:!0,configurable:!1,get(){return this[n]},set(a){this[n]!==a?(this[n]=a,s?.(this,t,a),this[u].attributes$.next({target:this,attribute:t,value:a})):i?.set&&(s?.(this,t,a),this[n]=a)}};ne(r,a=>{if(i||(a[n]=a[t]),Object.defineProperty(a,t,c),s?.(a,t,a[t]),e?.render){let C=e.render(a);C&&oe(a,C)}})}}function ce(t){return F(t,{persist:se,observe:!0})}function Be(t,e){let r=document.createTextNode("");return t[u].add(e.tap(n=>r.textContent=n)),r}var Y=document.createDocumentFragment();function B(t,e,r=t){if(e!=null)if(Array.isArray(e)){for(let n of e)B(t,n,Y);r!==Y&&r.appendChild(Y)}else t instanceof m&&e instanceof l?r.appendChild(Be(t,e)):e instanceof Node?r.appendChild(e):t instanceof m&&typeof e=="function"?B(t,e(t),r):r.appendChild(document.createTextNode(e))}function Ke(t,e){for(let r in e){let n=e[r];t instanceof m?n instanceof l?t[u].add(r==="$"?n:n.tap(o=>t[r]=o)):r==="$"&&typeof n=="function"?t[u].add(n(t)):t[r]=n:t[r]=n}}function E(t,e,...r){if(t!==E&&typeof t=="function"&&!(t.prototype instanceof m))return r.length&&((e??={}).children=r),t(e);let n=t===E?document.createDocumentFragment():typeof t=="string"?document.createElement(t):new t;return e&&Ke(n,e),r.length&&B(n,r),n}var Nt=A(":host{display:contents}");var We=U(),zt=ee(""),Rt=A(`:host([disabled]) {
1
+ // ../../ui-core/dist/ui/rx.js
2
+ var Undefined = {};
3
+ var Terminator = Symbol("terminator");
4
+ function Subscriber(observer, subscribe) {
5
+ let closed = false;
6
+ const result = {
7
+ error: error2,
8
+ unsubscribe,
9
+ get closed() {
10
+ return closed;
11
+ },
12
+ signal: new Signal(),
13
+ next(val) {
14
+ if (closed)
15
+ return;
16
+ try {
17
+ observer.next?.(val);
18
+ } catch (e) {
19
+ error2(e);
20
+ }
21
+ },
22
+ complete() {
23
+ if (!closed) {
24
+ try {
25
+ observer.complete?.();
26
+ } finally {
27
+ unsubscribe();
28
+ }
29
+ }
30
+ }
31
+ };
32
+ observer.signal?.subscribe(unsubscribe);
33
+ function error2(e) {
34
+ if (!closed) {
35
+ if (!observer.error) {
36
+ unsubscribe();
37
+ throw e;
38
+ }
39
+ try {
40
+ observer.error(e);
41
+ } finally {
42
+ unsubscribe();
43
+ }
44
+ } else
45
+ throw e;
46
+ }
47
+ function unsubscribe() {
48
+ if (!closed) {
49
+ closed = true;
50
+ result.signal.next();
51
+ }
52
+ }
53
+ try {
54
+ subscribe?.(result);
55
+ } catch (e) {
56
+ error2(e);
57
+ }
58
+ return result;
59
+ }
60
+ var Observable = class {
61
+ __subscribe;
62
+ constructor(__subscribe) {
63
+ this.__subscribe = __subscribe;
64
+ }
65
+ /**
66
+ * The `then` method allows an Observable to act like a Promise.
67
+ * It converts the Observable's emissions into a Promise that resolves on completion.
68
+ */
69
+ then(resolve, reject) {
70
+ return toPromise(this).then(resolve, reject);
71
+ }
72
+ /**
73
+ * Used to stitch together functional operators into a chain.
74
+ */
75
+ pipe(...extra) {
76
+ return extra.reduce((prev, fn) => fn(prev), this);
77
+ }
78
+ /**
79
+ * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.
80
+ */
81
+ subscribe(next) {
82
+ const observer = !next || typeof next === "function" ? { next } : next;
83
+ return Subscriber(observer, this.__subscribe);
84
+ }
85
+ };
86
+ var Subject = class extends Observable {
87
+ closed = false;
88
+ signal = new Signal();
89
+ observers = /* @__PURE__ */ new Set();
90
+ constructor() {
91
+ super((subscriber) => this.onSubscribe(subscriber));
92
+ }
93
+ /**
94
+ * Emits a new value to all active subscribers if the Subject is not in a closed state.
95
+ * - Iterates over the list of current subscribers and calls their `next` method with the provided value.
96
+ * - Inactive or closed subscribers are skipped.
97
+ * - This ensures only active subscribers receive new emissions.
98
+ */
99
+ next(a) {
100
+ if (!this.closed) {
101
+ for (const s of Array.from(this.observers))
102
+ if (!s.closed)
103
+ s.next(a);
104
+ }
105
+ }
106
+ /*
107
+ * This method emits an error notification to all active subscribers and sets the Subject's
108
+ * closed state to `true`, preventing any further emissions.
109
+ */
110
+ error(e) {
111
+ if (!this.closed) {
112
+ this.closed = true;
113
+ let shouldThrow = false, lastError;
114
+ for (const s of Array.from(this.observers))
115
+ try {
116
+ s.error(e);
117
+ } catch (e2) {
118
+ shouldThrow = true;
119
+ lastError = e2;
120
+ }
121
+ if (shouldThrow)
122
+ throw lastError;
123
+ }
124
+ }
125
+ /*
126
+ * `complete` method sends a final completion notification to all active subscribers
127
+ * and marks the Subject as closed.
128
+ */
129
+ complete() {
130
+ if (!this.closed) {
131
+ this.closed = true;
132
+ Array.from(this.observers).forEach((s) => s.complete());
133
+ this.observers.clear();
134
+ }
135
+ }
136
+ onSubscribe(subscriber) {
137
+ if (this.closed)
138
+ subscriber.complete();
139
+ else {
140
+ this.observers.add(subscriber);
141
+ subscriber.signal.subscribe(() => this.observers.delete(subscriber));
142
+ }
143
+ }
144
+ };
145
+ var Signal = class extends Observable {
146
+ closed = false;
147
+ observers = /* @__PURE__ */ new Set();
148
+ constructor() {
149
+ super((subscriber) => {
150
+ if (this.closed) {
151
+ subscriber.next();
152
+ subscriber.complete();
153
+ } else
154
+ this.observers.add(subscriber);
155
+ });
156
+ }
157
+ next() {
158
+ if (!this.closed) {
159
+ this.closed = true;
160
+ for (const s of Array.from(this.observers))
161
+ if (!s.closed) {
162
+ s.next();
163
+ s.complete();
164
+ }
165
+ this.observers.clear();
166
+ }
167
+ }
168
+ };
169
+ var OrderedSubject = class extends Subject {
170
+ queue = [];
171
+ emitting = false;
172
+ next(a) {
173
+ if (this.closed)
174
+ return;
175
+ if (this.emitting)
176
+ this.queue.push(a);
177
+ else {
178
+ this.emitting = true;
179
+ super.next(a);
180
+ while (this.queue.length)
181
+ super.next(this.queue.shift());
182
+ this.emitting = false;
183
+ }
184
+ }
185
+ };
186
+ var BehaviorSubject = class extends Subject {
187
+ currentValue;
188
+ constructor(currentValue) {
189
+ super();
190
+ this.currentValue = currentValue;
191
+ }
192
+ get value() {
193
+ return this.currentValue;
194
+ }
195
+ next(val) {
196
+ this.currentValue = val;
197
+ super.next(val);
198
+ }
199
+ onSubscribe(subscription) {
200
+ const result = super.onSubscribe(subscription);
201
+ if (!this.closed)
202
+ subscription.next(this.currentValue);
203
+ return result;
204
+ }
205
+ };
206
+ var ReplaySubject = class extends Subject {
207
+ bufferSize;
208
+ buffer = [];
209
+ hasError = false;
210
+ lastError;
211
+ constructor(bufferSize = Infinity) {
212
+ super();
213
+ this.bufferSize = bufferSize;
214
+ }
215
+ error(val) {
216
+ this.hasError = true;
217
+ this.lastError = val;
218
+ super.error(val);
219
+ }
220
+ next(val) {
221
+ if (this.buffer.length === this.bufferSize)
222
+ this.buffer.shift();
223
+ this.buffer.push(val);
224
+ return super.next(val);
225
+ }
226
+ onSubscribe(subscriber) {
227
+ this.observers.add(subscriber);
228
+ this.buffer.forEach((val) => subscriber.next(val));
229
+ if (this.hasError)
230
+ subscriber.error(this.lastError);
231
+ else if (this.closed)
232
+ subscriber.complete();
233
+ subscriber.signal.subscribe(() => this.observers.delete(subscriber));
234
+ }
235
+ };
236
+ var Reference = class extends Subject {
237
+ $value = Undefined;
238
+ get hasValue() {
239
+ return this.$value !== Undefined;
240
+ }
241
+ get value() {
242
+ if (this.$value === Undefined)
243
+ throw new Error("Reference not initialized");
244
+ return this.$value;
245
+ }
246
+ next(val) {
247
+ this.$value = val;
248
+ return super.next(val);
249
+ }
250
+ onSubscribe(subscription) {
251
+ if (!this.closed && this.$value !== Undefined)
252
+ subscription.next(this.$value);
253
+ super.onSubscribe(subscription);
254
+ }
255
+ };
256
+ var EmptyError = class extends Error {
257
+ message = "No elements in sequence";
258
+ };
259
+ function concat(...observables) {
260
+ return new Observable((subscriber) => {
261
+ let index = 0;
262
+ let innerSignal;
263
+ function onComplete() {
264
+ const next = observables[index++];
265
+ if (next && !subscriber.closed) {
266
+ innerSignal?.next();
267
+ next.subscribe({
268
+ next: subscriber.next,
269
+ error: subscriber.error,
270
+ complete: onComplete,
271
+ signal: innerSignal = new Signal()
272
+ });
273
+ } else
274
+ subscriber.complete();
275
+ }
276
+ subscriber.signal.subscribe(() => innerSignal?.next());
277
+ onComplete();
278
+ });
279
+ }
280
+ function defer(fn) {
281
+ return new Observable((subs) => {
282
+ fn().subscribe(subs);
283
+ });
284
+ }
285
+ function fromPromise(input) {
286
+ return new Observable((subs) => {
287
+ input.then((result) => {
288
+ if (!subs.closed)
289
+ subs.next(result);
290
+ subs.complete();
291
+ }).catch((err) => subs.error(err));
292
+ });
293
+ }
294
+ function fromIterable(input) {
295
+ return new Observable((subs) => {
296
+ for (const item of input)
297
+ if (!subs.closed)
298
+ subs.next(item);
299
+ subs.complete();
300
+ });
301
+ }
302
+ function from(input) {
303
+ if (input instanceof Observable)
304
+ return input;
305
+ if (input instanceof Promise)
306
+ return fromPromise(input);
307
+ return fromIterable(input);
308
+ }
309
+ function of(...values) {
310
+ return fromIterable(values);
311
+ }
312
+ function _toPromise(observable2) {
313
+ return new Promise((resolve, reject) => {
314
+ let value = Undefined;
315
+ observable2.subscribe({
316
+ next: (val) => value = val,
317
+ error: (e) => reject(e),
318
+ complete: () => resolve(value)
319
+ });
320
+ });
321
+ }
322
+ function toPromise(observable2) {
323
+ return _toPromise(observable2).then((r) => r === Undefined ? void 0 : r);
324
+ }
325
+ function operatorNext(fn, unsubscribe) {
326
+ return operator((subs) => ({ next: fn(subs), unsubscribe }));
327
+ }
328
+ function operator(fn) {
329
+ return (source) => new Observable((subscriber) => {
330
+ const next = fn(subscriber, source);
331
+ if (next.unsubscribe)
332
+ subscriber.signal.subscribe(() => next.unsubscribe?.());
333
+ if (!next.error)
334
+ next.error = subscriber.error;
335
+ if (!next.complete)
336
+ next.complete = subscriber.complete;
337
+ next.signal = subscriber.signal;
338
+ source.subscribe(next);
339
+ });
340
+ }
341
+ function map(mapFn) {
342
+ return operatorNext((subscriber) => (val) => subscriber.next(mapFn(val)));
343
+ }
344
+ function select(mapFn) {
345
+ let lastValue = Undefined;
346
+ return operatorNext((subscriber) => (val) => {
347
+ const result = mapFn(val);
348
+ if (result !== lastValue) {
349
+ lastValue = result;
350
+ subscriber.next(result);
351
+ }
352
+ });
353
+ }
354
+ function reduce(reduceFn, seed) {
355
+ return operator((subscriber) => {
356
+ let acc = seed;
357
+ let i = 0;
358
+ return {
359
+ next(val) {
360
+ acc = reduceFn(acc, val, i++);
361
+ },
362
+ complete() {
363
+ subscriber.next(acc);
364
+ subscriber.complete();
365
+ }
366
+ };
367
+ });
368
+ }
369
+ function throttleTime(time) {
370
+ return operator((subscriber) => {
371
+ let ready = true;
372
+ let to;
373
+ return {
374
+ next(val) {
375
+ if (!ready)
376
+ return;
377
+ ready = false;
378
+ subscriber.next(val);
379
+ to = setTimeout(() => ready = true, time);
380
+ },
381
+ unsubscribe: () => clearTimeout(to)
382
+ };
383
+ });
384
+ }
385
+ function timer(delay) {
386
+ return new Observable((subscriber) => {
387
+ const to = setTimeout(() => {
388
+ subscriber.next();
389
+ subscriber.complete();
390
+ }, delay);
391
+ subscriber.signal.subscribe(() => clearTimeout(to));
392
+ });
393
+ }
394
+ function debounceTime(time, useTimer = timer) {
395
+ return switchMap((val) => useTimer(time).map(() => val));
396
+ }
397
+ function switchMap(project) {
398
+ return (source) => observable((subscriber) => {
399
+ let hasSubscription = false;
400
+ let completed = false;
401
+ let signal;
402
+ const cleanUp = () => {
403
+ signal?.next();
404
+ hasSubscription = false;
405
+ if (completed)
406
+ subscriber.complete();
407
+ };
408
+ const outerSignal = new Signal();
409
+ subscriber.signal.subscribe(() => {
410
+ cleanUp();
411
+ outerSignal.next();
412
+ });
413
+ source.subscribe({
414
+ next(val) {
415
+ cleanUp();
416
+ signal = new Signal();
417
+ hasSubscription = true;
418
+ from(project(val)).subscribe({
419
+ next: subscriber.next,
420
+ error: subscriber.error,
421
+ complete: cleanUp,
422
+ signal
423
+ });
424
+ },
425
+ error: subscriber.error,
426
+ complete() {
427
+ completed = true;
428
+ if (!hasSubscription)
429
+ subscriber.complete();
430
+ },
431
+ signal: outerSignal
432
+ });
433
+ });
434
+ }
435
+ function mergeMap(project) {
436
+ return (source) => observable((subscriber) => {
437
+ const signal = subscriber.signal;
438
+ let count = 0;
439
+ let completed = 0;
440
+ let sourceCompleted = false;
441
+ source.subscribe({
442
+ next: (val) => {
443
+ count++;
444
+ from(project(val)).subscribe({
445
+ next: subscriber.next,
446
+ error: subscriber.error,
447
+ complete: () => {
448
+ completed++;
449
+ if (sourceCompleted && completed === count) {
450
+ subscriber.complete();
451
+ }
452
+ },
453
+ signal
454
+ });
455
+ },
456
+ error: subscriber.error,
457
+ complete() {
458
+ sourceCompleted = true;
459
+ if (completed === count)
460
+ subscriber.complete();
461
+ },
462
+ signal
463
+ });
464
+ });
465
+ }
466
+ function concatMap(project) {
467
+ return operator((subscriber) => {
468
+ const outerSignal = new Signal();
469
+ let innerSignal;
470
+ let innerSubscription;
471
+ const queue = [];
472
+ let completed = false;
473
+ let active = false;
474
+ const cleanUp = () => {
475
+ innerSignal?.next();
476
+ innerSignal = void 0;
477
+ innerSubscription = void 0;
478
+ active = false;
479
+ if (queue.length && !subscriber.closed)
480
+ run(queue.shift());
481
+ else if (completed)
482
+ subscriber.complete();
483
+ };
484
+ const run = (val) => {
485
+ active = true;
486
+ innerSignal = new Signal();
487
+ innerSubscription = from(project(val)).subscribe({
488
+ next: subscriber.next,
489
+ error: subscriber.error,
490
+ complete: cleanUp,
491
+ signal: innerSignal
492
+ });
493
+ };
494
+ subscriber.signal.subscribe(() => {
495
+ innerSignal?.next();
496
+ outerSignal.next();
497
+ });
498
+ return {
499
+ next(val) {
500
+ if (active)
501
+ queue.push(val);
502
+ else
503
+ run(val);
504
+ },
505
+ error: subscriber.error,
506
+ complete() {
507
+ completed = true;
508
+ if (!active && queue.length === 0)
509
+ subscriber.complete();
510
+ },
511
+ signal: outerSignal,
512
+ unsubscribe: () => innerSubscription?.unsubscribe()
513
+ };
514
+ });
515
+ }
516
+ function exhaustMap(project) {
517
+ return operator((subscriber) => {
518
+ let ready = true;
519
+ return {
520
+ next(val) {
521
+ if (ready) {
522
+ ready = false;
523
+ from(project(val)).subscribe({
524
+ next: subscriber.next,
525
+ error: subscriber.error,
526
+ complete: () => ready = true,
527
+ signal: subscriber.signal
528
+ });
529
+ }
530
+ }
531
+ };
532
+ });
533
+ }
534
+ function filter(fn) {
535
+ return operatorNext((subscriber) => (val) => {
536
+ if (fn(val))
537
+ subscriber.next(val);
538
+ });
539
+ }
540
+ function take(howMany) {
541
+ return operatorNext((subs) => (val) => {
542
+ if (howMany-- > 0 && !subs.closed)
543
+ subs.next(val);
544
+ if (howMany <= 0 || subs.closed)
545
+ subs.complete();
546
+ });
547
+ }
548
+ function takeWhile(fn) {
549
+ return operatorNext((subs) => (val) => {
550
+ if (!subs.closed && fn(val))
551
+ subs.next(val);
552
+ else
553
+ subs.complete();
554
+ });
555
+ }
556
+ function first() {
557
+ let done = false;
558
+ return operator((subs) => ({
559
+ next(val) {
560
+ if (done)
561
+ return;
562
+ done = true;
563
+ subs.next(val);
564
+ subs.complete();
565
+ },
566
+ complete() {
567
+ if (!subs.closed)
568
+ subs.error(new EmptyError());
569
+ }
570
+ }));
571
+ }
572
+ function tap(fn) {
573
+ return operatorNext((subscriber) => (val) => {
574
+ fn(val);
575
+ subscriber.next(val);
576
+ });
577
+ }
578
+ function catchError(selector) {
579
+ return operator((subscriber, source) => {
580
+ let signal;
581
+ const observer = {
582
+ next: subscriber.next,
583
+ error(err) {
584
+ try {
585
+ if (subscriber.closed)
586
+ return;
587
+ const result = selector(err, source);
588
+ signal?.next();
589
+ signal = new Signal();
590
+ result.subscribe({ ...observer, signal });
591
+ } catch (err2) {
592
+ subscriber.error(err2);
593
+ }
594
+ },
595
+ unsubscribe: () => signal?.next()
596
+ };
597
+ return observer;
598
+ });
599
+ }
600
+ function distinctUntilChanged() {
601
+ return operatorNext((subscriber) => {
602
+ let lastValue = Undefined;
603
+ return (val) => {
604
+ if (val !== lastValue) {
605
+ lastValue = val;
606
+ subscriber.next(val);
607
+ }
608
+ };
609
+ });
610
+ }
611
+ function shareLatest() {
612
+ return (source) => {
613
+ const subject = new ReplaySubject(1);
614
+ let ready = false;
615
+ return observable((subs) => {
616
+ subject.subscribe(subs);
617
+ if (!ready) {
618
+ ready = true;
619
+ source.subscribe(subject);
620
+ }
621
+ });
622
+ };
623
+ }
624
+ function share() {
625
+ return (source) => {
626
+ let subject;
627
+ let subscriptionCount = 0;
628
+ function complete() {
629
+ if (--subscriptionCount === 0)
630
+ subject.signal.next();
631
+ }
632
+ return observable((subs) => {
633
+ subs.signal.subscribe(complete);
634
+ if (subscriptionCount++ === 0) {
635
+ subject = ref();
636
+ subject.subscribe(subs);
637
+ source.subscribe(subject);
638
+ } else
639
+ subject.subscribe(subs);
640
+ });
641
+ };
642
+ }
643
+ function publishLast() {
644
+ return (source) => {
645
+ const subject = new Subject();
646
+ let sourceSubscription;
647
+ let lastValue;
648
+ let hasEmitted = false;
649
+ let ready = false;
650
+ return observable((subs) => {
651
+ if (ready) {
652
+ subs.next(lastValue);
653
+ subs.complete();
654
+ } else
655
+ subject.subscribe(subs);
656
+ sourceSubscription ??= source.subscribe({
657
+ next: (val) => {
658
+ hasEmitted = true;
659
+ lastValue = val;
660
+ },
661
+ error: subs.error,
662
+ complete() {
663
+ ready = true;
664
+ if (hasEmitted)
665
+ subject.next(lastValue);
666
+ subject.complete();
667
+ },
668
+ signal: subs.signal
669
+ });
670
+ });
671
+ };
672
+ }
673
+ function merge(...observables) {
674
+ if (observables.length === 1)
675
+ return observables[0];
676
+ return new Observable((subs) => {
677
+ let refCount = observables.length;
678
+ for (const o of observables)
679
+ if (!subs.closed)
680
+ o.subscribe({
681
+ next: subs.next,
682
+ error: subs.error,
683
+ complete() {
684
+ if (refCount-- === 1)
685
+ subs.complete();
686
+ },
687
+ signal: subs.signal
688
+ });
689
+ });
690
+ }
691
+ function finalize(unsubscribe) {
692
+ return operator((subscriber) => ({
693
+ next: subscriber.next,
694
+ unsubscribe
695
+ }));
696
+ }
697
+ function ignoreElements() {
698
+ return filter(() => false);
699
+ }
700
+ var EMPTY = new Observable((subs) => subs.complete());
701
+ function be(initialValue) {
702
+ return new BehaviorSubject(initialValue);
703
+ }
704
+ function observable(subscribe) {
705
+ return new Observable(subscribe);
706
+ }
707
+ function ref() {
708
+ return new Reference();
709
+ }
710
+ var operators = {
711
+ catchError,
712
+ concatMap,
713
+ debounceTime,
714
+ distinctUntilChanged,
715
+ exhaustMap,
716
+ filter,
717
+ finalize,
718
+ first,
719
+ ignoreElements,
720
+ map,
721
+ mergeMap,
722
+ publishLast,
723
+ reduce,
724
+ select,
725
+ share,
726
+ shareLatest,
727
+ switchMap,
728
+ take,
729
+ takeWhile,
730
+ tap,
731
+ throttleTime
732
+ };
733
+ for (const p in operators) {
734
+ Observable.prototype[p] = function(...args) {
735
+ return this.pipe(operators[p](...args));
736
+ };
737
+ }
738
+
739
+ // ../../ui-core/dist/ui/dom.js
740
+ function on(element, event, options) {
741
+ return new Observable((subscriber) => {
742
+ const handler = subscriber.next.bind(subscriber);
743
+ element.addEventListener(event, handler, options);
744
+ subscriber.signal.subscribe(() => element.removeEventListener(event, handler, options));
745
+ });
746
+ }
747
+ function debounceRaf(fn) {
748
+ let to;
749
+ return function(...args) {
750
+ if (to)
751
+ cancelAnimationFrame(to);
752
+ to = requestAnimationFrame(() => {
753
+ fn.apply(this, args);
754
+ to = 0;
755
+ });
756
+ };
757
+ }
758
+ function raf(fn) {
759
+ return operator((subscriber) => {
760
+ const next = debounceRaf((val) => {
761
+ if (subscriber.closed)
762
+ return;
763
+ if (fn)
764
+ fn(val);
765
+ subscriber.next(val);
766
+ if (completed)
767
+ subscriber.complete();
768
+ });
769
+ let completed = false;
770
+ return {
771
+ next,
772
+ complete: () => completed = true
773
+ };
774
+ });
775
+ }
776
+ function onEvent(css2, onEv, offEv) {
777
+ return ($) => concat(of(css2 ? $.matches(css2) : false), on($, onEv).switchMap(() => merge(of(true), on($, offEv).map(() => css2 ? $.matches(css2) : false))));
778
+ }
779
+ var animated = onEvent("", "animationstart", "animationend");
780
+ var hovered = onEvent("", "mouseenter", "mouseleave");
781
+ var focused = onEvent(":focus,:focus-within", "focusin", "focusout");
782
+
783
+ // ../../ui-core/dist/ui/component.js
784
+ var LOG = tap((val) => console.trace(val));
785
+ Observable.prototype.log = function() {
786
+ return this.pipe(LOG);
787
+ };
788
+ Observable.prototype.raf = function(fn) {
789
+ return this.pipe(raf(fn));
790
+ };
791
+ var bindings = Symbol("bindings");
792
+ var registeredComponents = {};
793
+ var augments = Symbol("augments");
794
+ var parserSymbol = Symbol("parser");
795
+ var Bindings = class {
796
+ bindings;
797
+ messageHandlers;
798
+ internals;
799
+ attributes$ = new OrderedSubject();
800
+ wasConnected = false;
801
+ wasInitialized = false;
802
+ subscriptions;
803
+ prebind;
804
+ addMessageHandler(handler) {
805
+ (this.messageHandlers ??= /* @__PURE__ */ new Set()).add(handler);
806
+ }
807
+ removeMessageHandler(handler) {
808
+ this.messageHandlers?.delete(handler);
809
+ }
810
+ message(event, val) {
811
+ let stop = false;
812
+ if (this.messageHandlers)
813
+ for (const m of this.messageHandlers) {
814
+ if (m.type === event) {
815
+ m.next(val);
816
+ stop ||= m.stopPropagation;
817
+ }
818
+ }
819
+ return stop;
820
+ }
821
+ add(binding) {
822
+ if (this.wasConnected)
823
+ throw new Error("Cannot bind connected component.");
824
+ if (this.wasInitialized)
825
+ (this.bindings ??= []).push(binding);
826
+ else
827
+ (this.prebind ??= []).push(binding);
828
+ }
829
+ connect() {
830
+ this.wasConnected = true;
831
+ if (!this.subscriptions && (this.prebind || this.bindings)) {
832
+ const subs = this.subscriptions = [];
833
+ if (this.bindings)
834
+ for (const b of this.bindings)
835
+ subs.push(b.subscribe());
836
+ if (this.prebind)
837
+ for (const b of this.prebind)
838
+ subs.push(b.subscribe());
839
+ }
840
+ }
841
+ disconnect() {
842
+ this.subscriptions?.forEach((s) => s.unsubscribe());
843
+ this.subscriptions = void 0;
844
+ }
845
+ };
846
+ var cssSymbol = Symbol("css");
847
+ var Component = class extends HTMLElement {
848
+ static observedAttributes;
849
+ static [augments];
850
+ static [parserSymbol];
851
+ [bindings] = new Bindings();
852
+ /**
853
+ * Symbol used to indicate whether the CSS for this node has been applied,
854
+ * preventing duplicate style insertions.
855
+ */
856
+ [cssSymbol];
857
+ connectedCallback() {
858
+ this[bindings].wasInitialized = true;
859
+ if (!this[bindings].wasConnected)
860
+ this.constructor[augments]?.forEach((f) => f(this));
861
+ this[bindings].connect();
862
+ }
863
+ disconnectedCallback() {
864
+ this[bindings].disconnect();
865
+ }
866
+ attributeChangedCallback(name, oldValue, value) {
867
+ const parser = this.constructor[parserSymbol]?.[name] ?? defaultAttributeParser;
868
+ if (oldValue !== value)
869
+ this[name] = parser(value, this[name]);
870
+ }
871
+ };
872
+ function defaultAttributeParser(value, oldValue) {
873
+ const isBoolean = oldValue === false || oldValue === true;
874
+ if (value === "") {
875
+ return isBoolean ? true : "";
876
+ } else
877
+ return value === null ? isBoolean ? false : void 0 : value;
878
+ }
879
+ function pushRender(ctor, renderFn) {
880
+ if (!ctor.hasOwnProperty(augments))
881
+ ctor[augments] = ctor[augments]?.slice(0) ?? [];
882
+ ctor[augments]?.push(renderFn);
883
+ }
884
+ var shadowConfig = { mode: "open" };
885
+ function getShadow(el) {
886
+ return el.shadowRoot ?? el.attachShadow(shadowConfig);
887
+ }
888
+ function appendShadow(host, child) {
889
+ if (child instanceof Node)
890
+ getShadow(host).appendChild(child);
891
+ else
892
+ host[bindings].add(child);
893
+ }
894
+ function doAugment(constructor, augments2) {
895
+ if (augments2.length)
896
+ pushRender(constructor, (node) => {
897
+ for (const d of augments2) {
898
+ const result = d.call(constructor, node);
899
+ if (result && result !== node)
900
+ appendShadow(node, result);
901
+ }
902
+ });
903
+ }
904
+ function registerComponent(tagName, ctor) {
905
+ registeredComponents[tagName] = ctor;
906
+ customElements.define(tagName, ctor);
907
+ }
908
+ function component(ctor, { init, augment, tagName }) {
909
+ if (init)
910
+ for (const fn of init)
911
+ fn(ctor);
912
+ if (augment)
913
+ doAugment(ctor, augment);
914
+ if (tagName)
915
+ registerComponent(tagName, ctor);
916
+ }
917
+ function attributeChanged(element, attribute2) {
918
+ return element[bindings].attributes$.pipe(filter((ev) => ev.attribute === attribute2), map(() => element[attribute2]));
919
+ }
920
+ function get(element, attribute2) {
921
+ return merge(attributeChanged(element, attribute2), defer(() => of(element[attribute2])));
922
+ }
923
+ function getObservedAttributes(target) {
924
+ let result = target.observedAttributes;
925
+ if (result && !target.hasOwnProperty("observedAttributes"))
926
+ result = target.observedAttributes?.slice(0);
927
+ return target.observedAttributes = result || [];
928
+ }
929
+ function setAttribute(el, attr, val) {
930
+ if (val === false || val === null || val === void 0)
931
+ val = null;
932
+ else if (val === true)
933
+ val = "";
934
+ if (val === null)
935
+ el.removeAttribute(attr);
936
+ else
937
+ el.setAttribute(attr, String(val));
938
+ return val;
939
+ }
940
+ function pushParser(ctor, name, parser) {
941
+ if (!ctor.hasOwnProperty(parserSymbol))
942
+ ctor[parserSymbol] = { ...ctor[parserSymbol] };
943
+ if (ctor[parserSymbol])
944
+ ctor[parserSymbol][name] = parser;
945
+ }
946
+ function attribute(name, options) {
947
+ return (ctor) => {
948
+ if (options?.observe !== false)
949
+ getObservedAttributes(ctor).push(name);
950
+ if (options?.parse)
951
+ pushParser(ctor, name, options.parse);
952
+ const prop = `$$${name}`;
953
+ const proto = ctor.prototype;
954
+ const descriptor = Object.getOwnPropertyDescriptor(proto, name);
955
+ if (descriptor)
956
+ Object.defineProperty(proto, prop, descriptor);
957
+ const persist = options?.persist;
958
+ const newDescriptor = {
959
+ enumerable: true,
960
+ configurable: false,
961
+ get() {
962
+ return this[prop];
963
+ },
964
+ set(value) {
965
+ const current = this[prop];
966
+ if (current !== value) {
967
+ this[prop] = value;
968
+ persist?.(this, name, value);
969
+ this[bindings].attributes$.next({
970
+ target: this,
971
+ attribute: name,
972
+ value
973
+ });
974
+ } else if (descriptor?.set) {
975
+ persist?.(this, name, value);
976
+ this[prop] = value;
977
+ }
978
+ }
979
+ };
980
+ pushRender(ctor, (target) => {
981
+ if (!descriptor)
982
+ target[prop] = target[name];
983
+ Object.defineProperty(target, name, newDescriptor);
984
+ persist?.(target, name, target[name]);
985
+ if (options?.render) {
986
+ const result = options.render(target);
987
+ if (result)
988
+ appendShadow(target, result);
989
+ }
990
+ });
991
+ };
992
+ }
993
+ function styleAttribute(name) {
994
+ return attribute(name, {
995
+ persist: setAttribute,
996
+ observe: true
997
+ });
998
+ }
999
+ function expression(host, binding) {
1000
+ const result = document.createTextNode("");
1001
+ host[bindings].add(binding.tap((val) => result.textContent = val));
1002
+ return result;
1003
+ }
1004
+ var childrenFragment = document.createDocumentFragment();
1005
+ function renderChildren(host, children, appendTo = host) {
1006
+ if (children === void 0 || children === null)
1007
+ return;
1008
+ if (Array.isArray(children)) {
1009
+ for (const child of children)
1010
+ renderChildren(host, child, childrenFragment);
1011
+ if (appendTo !== childrenFragment)
1012
+ appendTo.appendChild(childrenFragment);
1013
+ } else if (host instanceof Component && children instanceof Observable)
1014
+ appendTo.appendChild(expression(host, children));
1015
+ else if (children instanceof Node)
1016
+ appendTo.appendChild(children);
1017
+ else if (host instanceof Component && typeof children === "function")
1018
+ renderChildren(host, children(host), appendTo);
1019
+ else
1020
+ appendTo.appendChild(document.createTextNode(children));
1021
+ }
1022
+ function renderAttributes(host, attributes) {
1023
+ for (const attr in attributes) {
1024
+ const value = attributes[attr];
1025
+ if (host instanceof Component) {
1026
+ if (value instanceof Observable)
1027
+ host[bindings].add(attr === "$" ? value : value.tap((v) => host[attr] = v));
1028
+ else if (attr === "$" && typeof value === "function")
1029
+ host[bindings].add(value(host));
1030
+ else
1031
+ host[attr] = value;
1032
+ } else
1033
+ host[attr] = value;
1034
+ }
1035
+ }
1036
+ function tsx(component2, attributes, ...children) {
1037
+ if (component2 !== tsx && typeof component2 === "function" && !(component2.prototype instanceof Component)) {
1038
+ if (children.length)
1039
+ (attributes ??= {}).children = children;
1040
+ return component2(attributes);
1041
+ }
1042
+ const element = component2 === tsx ? document.createDocumentFragment() : typeof component2 === "string" ? document.createElement(component2) : new component2();
1043
+ if (attributes)
1044
+ renderAttributes(element, attributes);
1045
+ if (children.length)
1046
+ renderChildren(element, children);
1047
+ return element;
1048
+ }
1049
+
1050
+ // ../../ui-core/dist/ui/theme.js
1051
+ var displayContents = css(":host{display:contents}");
1052
+ var onThemeChange = ref();
1053
+ var themeName = be("");
1054
+ var disabledStyles = css(`:host([disabled]) {
2
1055
  cursor: default;
3
1056
  pointer-events: var(--cxl-override-pointer-events, none);
4
- }`),Mt=`
1057
+ }`);
1058
+ var itemLayout = `
5
1059
  box-sizing: border-box;
6
1060
  position: relative;
7
1061
  display: flex;
@@ -9,8 +1063,176 @@ var d={},bt=Symbol("terminator");function he(t,e){let r=!1,n={error:o,unsubscrib
9
1063
  min-height: 56px;
10
1064
  align-items: center;
11
1065
  column-gap: 16px;
12
- ${tt("body-medium")}
13
- `,Xe=(()=>{for(let t of Array.from(document.fonts.keys()))if(t.family==="Roboto")return!0;return!1})(),pe={primary:"#186584","on-primary":"#FFFFFF","primary-container":"#C1E8FF","on-primary-container":"#004D67",secondary:"#4E616C","on-secondary":"#FFFFFF","secondary-container":"#D1E6F3","on-secondary-container":"#364954",tertiary:"#5F5A7D","on-tertiary":"#FFFFFF","tertiary-container":"#E5DEFF","on-tertiary-container":"#474364",error:"#BA1A1A","on-error":"#FFFFFF","error-container":"#FFDAD6","on-error-container":"#93000A",background:"#F6FAFE","on-background":"#171C1F",surface:"#F6FAFE","on-surface":"#171C1F","surface-variant":"#DCE3E9","on-surface-variant":"#40484D",outline:"#71787D","outline-variant":"#C0C7CD",scrim:"rgb(29 27 32 / 0.5)","inverse-surface":"#2C3134","on-inverse-surface":"#EDF1F5","inverse-primary":"#8ECFF2","primary-fixed":"#C1E8FF","on-primary-fixed":"#001E2B","primary-fixed-dim":"#8ECFF2","on-primary-fixed-variant":"#004D67","secondary-fixed":"#D1E6F3","on-secondary-fixed":"#091E28","secondary-fixed-dim":"#B5C9D7","on-secondary-fixed-variant":"#364954","tertiary-fixed":"#E5DEFF","on-tertiary-fixed":"#1B1736","tertiary-fixed-dim":"#C9C2EA","on-tertiary-fixed-variant":"#474364","surface-dim":"#D6DADE","surface-bright":"#F6FAFE","surface-container-lowest":"#FFFFFF","surface-container-low":"#F0F4F8","surface-container":"#EAEEF2","surface-container-high":"#E5E9ED","surface-container-highest":"#DFE3E7",warning:"#DD2C00","on-warning":"#FFFFFF","warning-container":"#FFF4E5","on-warning-container":"#8C1D18",success:"#2E7D32","on-success":"#FFFFFF","success-container":"#81C784","on-success-container":"#000000"};function Je(t=pe){return Object.entries(t).map(([e,r])=>`--cxl-color--${e}:${r};--cxl-color-${e}:var(--cxl-color--${e});`).join("")}var h={name:"",animation:{flash:{kf:{opacity:[1,0,1,0,1]},options:{easing:"ease-in"}},spin:{kf:{rotate:["0deg","360deg"]}},pulse:{kf:{rotate:["0deg","360deg"]},options:{easing:"steps(8)"}},openY:{kf:t=>({height:["0",`${t.scrollHeight}px`]})},closeY:{kf:t=>({height:[`${t.scrollHeight}px`,"0"]})},expand:{kf:{scale:[0,1]}},expandX:{kf:{scale:["0 1","1 1"]}},expandY:{kf:{scale:["1 0","1 1"]}},zoomIn:{kf:{scale:[.3,1]}},zoomOut:{kf:{scale:[1,.3]}},scaleUp:{kf:{scale:[1,1.25]}},fadeIn:{kf:[{opacity:0},{opacity:1}]},fadeOut:{kf:[{opacity:1},{opacity:0}]},shakeX:{kf:{translate:["0","-10px","10px","-10px","10px","-10px","10px","-10px","10px","0"]}},shakeY:{kf:{translate:["0","0 -10px","0 10px","0 -10px","0 10px","0 -10px","0 10px","0 -10px","0 10px","0"]}},slideOutLeft:{kf:{translate:["0","-100% 0"]}},slideInLeft:{kf:{translate:["-100% 0","0"]}},slideOutRight:{kf:{translate:["0","100% 0"]}},slideInRight:{kf:{translate:["100% 0","0"]}},slideInUp:{kf:{translate:["0 100%","0"]}},slideInDown:{kf:{translate:["0 -100%","0"]}},slideOutUp:{kf:{translate:["0","0 -100%"]}},slideOutDown:{kf:{translate:["0","0 100%"]}},focus:{kf:[{offset:.1,filter:"brightness(150%)"},{filter:"brightness(100%)"}],options:{duration:500}}},easing:{emphasized:"cubic-bezier(0.2, 0.0, 0, 1.0)",emphasized_accelerate:"cubic-bezier(0.05, 0.7, 0.1, 1.0)",emphasized_decelerate:"cubic-bezier(0.3, 0.0, 0.8, 0.15)",standard:"cubic-bezier(0.2, 0.0, 0, 1.0)",standard_accelerate:"cubic-bezier(0, 0, 0, 1)",standard_decelerate:"cubic-bezier(0.3, 0, 1, 1)"},breakpoints:{xsmall:0,small:600,medium:905,large:1240,xlarge:1920,xxlarge:2560},disableAnimations:!1,prefersReducedMotion:window.matchMedia("(prefers-reduced-motion: reduce)").matches,colors:pe,imports:Xe?void 0:["https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400&family=Roboto:wght@300;400;500;700&display=swap"],globalCss:`:root{
1066
+ ${font("body-medium")}
1067
+ `;
1068
+ var hasRobotoFont = (() => {
1069
+ for (const font2 of Array.from(document.fonts.keys()))
1070
+ if (font2.family === "Roboto")
1071
+ return true;
1072
+ return false;
1073
+ })();
1074
+ var baseColors = {
1075
+ primary: "#186584",
1076
+ "on-primary": "#FFFFFF",
1077
+ "primary-container": "#C1E8FF",
1078
+ "on-primary-container": "#004D67",
1079
+ secondary: "#4E616C",
1080
+ "on-secondary": "#FFFFFF",
1081
+ "secondary-container": "#D1E6F3",
1082
+ "on-secondary-container": "#364954",
1083
+ tertiary: "#5F5A7D",
1084
+ "on-tertiary": "#FFFFFF",
1085
+ "tertiary-container": "#E5DEFF",
1086
+ "on-tertiary-container": "#474364",
1087
+ error: "#BA1A1A",
1088
+ "on-error": "#FFFFFF",
1089
+ "error-container": "#FFDAD6",
1090
+ "on-error-container": "#93000A",
1091
+ background: "#F6FAFE",
1092
+ "on-background": "#171C1F",
1093
+ surface: "#F6FAFE",
1094
+ "on-surface": "#171C1F",
1095
+ "surface-variant": "#DCE3E9",
1096
+ "on-surface-variant": "#40484D",
1097
+ outline: "#71787D",
1098
+ "outline-variant": "#C0C7CD",
1099
+ scrim: "rgb(29 27 32 / 0.5)",
1100
+ "inverse-surface": "#2C3134",
1101
+ "on-inverse-surface": "#EDF1F5",
1102
+ "inverse-primary": "#8ECFF2",
1103
+ "primary-fixed": "#C1E8FF",
1104
+ "on-primary-fixed": "#001E2B",
1105
+ "primary-fixed-dim": "#8ECFF2",
1106
+ "on-primary-fixed-variant": "#004D67",
1107
+ "secondary-fixed": "#D1E6F3",
1108
+ "on-secondary-fixed": "#091E28",
1109
+ "secondary-fixed-dim": "#B5C9D7",
1110
+ "on-secondary-fixed-variant": "#364954",
1111
+ "tertiary-fixed": "#E5DEFF",
1112
+ "on-tertiary-fixed": "#1B1736",
1113
+ "tertiary-fixed-dim": "#C9C2EA",
1114
+ "on-tertiary-fixed-variant": "#474364",
1115
+ "surface-dim": "#D6DADE",
1116
+ "surface-bright": "#F6FAFE",
1117
+ "surface-container-lowest": "#FFFFFF",
1118
+ "surface-container-low": "#F0F4F8",
1119
+ "surface-container": "#EAEEF2",
1120
+ "surface-container-high": "#E5E9ED",
1121
+ "surface-container-highest": "#DFE3E7",
1122
+ warning: "#DD2C00",
1123
+ "on-warning": "#FFFFFF",
1124
+ "warning-container": "#FFF4E5",
1125
+ "on-warning-container": "#8C1D18",
1126
+ success: "#2E7D32",
1127
+ "on-success": "#FFFFFF",
1128
+ "success-container": "#81C784",
1129
+ "on-success-container": "#000000"
1130
+ };
1131
+ function buildPalette(colors = baseColors) {
1132
+ return Object.entries(colors).map(([key, value]) => `--cxl-color--${key}:${value};--cxl-color-${key}:var(--cxl-color--${key});`).join("");
1133
+ }
1134
+ var theme = {
1135
+ name: "",
1136
+ animation: {
1137
+ flash: {
1138
+ kf: { opacity: [1, 0, 1, 0, 1] },
1139
+ options: { easing: "ease-in" }
1140
+ },
1141
+ spin: {
1142
+ kf: { rotate: ["0deg", "360deg"] }
1143
+ },
1144
+ pulse: {
1145
+ kf: { rotate: ["0deg", "360deg"] },
1146
+ options: { easing: "steps(8)" }
1147
+ },
1148
+ openY: { kf: (el) => ({ height: ["0", `${el.scrollHeight}px`] }) },
1149
+ closeY: { kf: (el) => ({ height: [`${el.scrollHeight}px`, "0"] }) },
1150
+ expand: { kf: { scale: [0, 1] } },
1151
+ expandX: { kf: { scale: ["0 1", "1 1"] } },
1152
+ expandY: { kf: { scale: ["1 0", "1 1"] } },
1153
+ zoomIn: { kf: { scale: [0.3, 1] } },
1154
+ zoomOut: { kf: { scale: [1, 0.3] } },
1155
+ scaleUp: { kf: { scale: [1, 1.25] } },
1156
+ fadeIn: { kf: [{ opacity: 0 }, { opacity: 1 }] },
1157
+ fadeOut: { kf: [{ opacity: 1 }, { opacity: 0 }] },
1158
+ shakeX: {
1159
+ /*kf: () => ({
1160
+ translate: randomShake(10, 8, 'x'),
1161
+ }),*/
1162
+ kf: {
1163
+ translate: [
1164
+ "0",
1165
+ "-10px",
1166
+ "10px",
1167
+ "-10px",
1168
+ "10px",
1169
+ "-10px",
1170
+ "10px",
1171
+ "-10px",
1172
+ "10px",
1173
+ "0"
1174
+ ]
1175
+ }
1176
+ },
1177
+ shakeY: {
1178
+ /*kf: {
1179
+ translate: [ '0', 'var(--cxl-animation-shakeX)', '0' ],
1180
+ },*/
1181
+ kf: {
1182
+ translate: [
1183
+ "0",
1184
+ "0 -10px",
1185
+ "0 10px",
1186
+ "0 -10px",
1187
+ "0 10px",
1188
+ "0 -10px",
1189
+ "0 10px",
1190
+ "0 -10px",
1191
+ "0 10px",
1192
+ "0"
1193
+ ]
1194
+ }
1195
+ },
1196
+ slideOutLeft: { kf: { translate: ["0", "-100% 0"] } },
1197
+ slideInLeft: { kf: { translate: ["-100% 0", "0"] } },
1198
+ slideOutRight: { kf: { translate: ["0", "100% 0"] } },
1199
+ slideInRight: { kf: { translate: ["100% 0", "0"] } },
1200
+ slideInUp: { kf: { translate: ["0 100%", "0"] } },
1201
+ slideInDown: { kf: { translate: ["0 -100%", "0"] } },
1202
+ slideOutUp: { kf: { translate: ["0", "0 -100%"] } },
1203
+ slideOutDown: { kf: { translate: ["0", "0 100%"] } },
1204
+ focus: {
1205
+ kf: [
1206
+ { offset: 0.1, filter: "brightness(150%)" },
1207
+ { filter: "brightness(100%)" }
1208
+ ],
1209
+ options: { duration: 500 }
1210
+ }
1211
+ },
1212
+ easing: {
1213
+ emphasized: "cubic-bezier(0.2, 0.0, 0, 1.0)",
1214
+ emphasized_accelerate: "cubic-bezier(0.05, 0.7, 0.1, 1.0)",
1215
+ emphasized_decelerate: "cubic-bezier(0.3, 0.0, 0.8, 0.15)",
1216
+ standard: "cubic-bezier(0.2, 0.0, 0, 1.0)",
1217
+ standard_accelerate: "cubic-bezier(0, 0, 0, 1)",
1218
+ standard_decelerate: "cubic-bezier(0.3, 0, 1, 1)"
1219
+ },
1220
+ breakpoints: {
1221
+ xsmall: 0,
1222
+ small: 600,
1223
+ medium: 905,
1224
+ large: 1240,
1225
+ xlarge: 1920,
1226
+ xxlarge: 2560
1227
+ },
1228
+ //isRTL: false as boolean,
1229
+ disableAnimations: false,
1230
+ prefersReducedMotion: window.matchMedia("(prefers-reduced-motion: reduce)").matches,
1231
+ colors: baseColors,
1232
+ imports: hasRobotoFont ? void 0 : [
1233
+ "https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;700&family=Roboto:wght@300;400;500;700&display=swap"
1234
+ ],
1235
+ globalCss: `:root{
14
1236
  --cxl-font-family: Roboto;
15
1237
  --cxl-font-monospace:"Roboto Mono", monospace;
16
1238
 
@@ -65,29 +1287,325 @@ var d={},bt=Symbol("terminator");function he(t,e){let r=!1,n={error:o,unsubscrib
65
1287
  --cxl-shape-corner-xsmall: 4px;
66
1288
  --cxl-shape-corner-full: 50vh;
67
1289
  }
68
- `,css:""};function Qe(t=""){return`:host ${t} {
1290
+ `,
1291
+ css: ""
1292
+ };
1293
+ function buildMask(sel = "") {
1294
+ return `:host ${sel} {
69
1295
  --cxl-mask-hover: color-mix(in srgb, var(--cxl-color-on-surface) 8%, transparent);
70
1296
  --cxl-mask-focus: color-mix(in srgb, var(--cxl-color-on-surface) 10%, transparent);
71
1297
  --cxl-mask-active: linear-gradient(0, var(--cxl-color-surface-container),var(--cxl-color-surface-container));
72
1298
  }
73
- :host(:hover) ${t} { background-image: linear-gradient(0, var(--cxl-mask-hover),var(--cxl-mask-hover)); }
74
- :host(:focus-visible) ${t} { background-image: linear-gradient(0, var(--cxl-mask-focus),var(--cxl-mask-focus)) }
1299
+ :host(:hover) ${sel} { background-image: linear-gradient(0, var(--cxl-mask-hover),var(--cxl-mask-hover)); }
1300
+ :host(:focus-visible) ${sel} { background-image: linear-gradient(0, var(--cxl-mask-focus),var(--cxl-mask-focus)) }
75
1301
  :host{-webkit-tap-highlight-color: transparent}
76
- `}var Lt=A(Qe());var ae,Ze;function et(t){let e;return We.tap(r=>{let n=r?.theme.override?.[t.tagName];n?e?e.replace(n).catch(o=>console.error(o)):t.shadowRoot?.adoptedStyleSheets.push(e??=T(n)):e&&e.replaceSync("")})}function T(t){let e=new CSSStyleSheet;return t&&e.replaceSync(t),e}function A(t){let e;return r=>{let n=K(r);if(n.adoptedStyleSheets.push(e??=T(t)),!r[I])return h.css&&n.adoptedStyleSheets.unshift(Ze??=T(h.css)),r[I]=!0,et(r)}}var de=["background","primary","primary-container","primary-fixed-dim","primary-fixed","secondary","secondary-container","tertiary","tertiary-container","surface","surface-container","surface-container-low","surface-container-lowest","surface-container-highest","surface-container-high","error","error-container","success","success-container","warning","warning-container","inverse-surface","inverse-primary"],Ot=[...de,"inherit"];function le(t,e="surface"){return`--cxl-color-${e}: var(--cxl-color--${t});
77
- --cxl-color-on-${e}: var(--cxl-color--on-${t}, var(--cxl-color--on-surface));
78
- --cxl-color-surface-variant: var(--cxl-color--${t==="surface"?"surface-variant":t});
79
- --cxl-color-on-surface-variant: ${t.includes("surface")?"var(--cxl-color--on-surface-variant)":`color-mix(in srgb, var(--cxl-color--on-${t}) 80%, transparent)`};
80
- `}var Ht=de.reduce((t,e)=>(t[e]=`
81
- ${le(e)}
82
- ${e==="inverse-surface"?le("inverse-primary","primary"):""}
83
- `,t),{inherit:"color:inherit;background-color:inherit;"});function tt(t){return`font:var(--cxl-font-${t});letter-spacing:var(--cxl-letter-spacing-${t});`}var rt=requestAnimationFrame(()=>ot());var ue=document.createElement("template"),fe={};function nt(t){return function(e){let r=t(e),n=fe[r];if(n)return n.cloneNode(!0);let o=document.createElementNS("http://www.w3.org/2000/svg","svg"),i=()=>(o.dispatchEvent(new ErrorEvent("error")),"");return fetch(r).then(s=>s.ok?s.text():i(),i).then(s=>{if(!s)return;ue.innerHTML=s;let c=ue.content.children[0];if(!c)return;let a=c.getAttribute("viewBox");a?o.setAttribute("viewBox",a):c.hasAttribute("width")&&c.hasAttribute("height")&&o.setAttribute("viewBox",`0 0 ${c.getAttribute("width")} ${c.getAttribute("height")}`);for(let C of c.childNodes)o.append(C);fe[e.name]=o}).catch(s=>console.error(s)),o.setAttribute("fill","currentColor"),o}}var _t=nt(({name:t,width:e,fill:r})=>(e!==20&&e!==24&&e!==40&&e!==48&&(e=48),`https://cdn.jsdelivr.net/gh/google/material-design-icons@941fa95/symbols/web/${t}/materialsymbolsoutlined/${t}_${r?"fill1_":""}${e}px.svg`));var W,Vt=new Promise(t=>{W=t});function ot(t){cancelAnimationFrame(rt),ae||(t&&(t.colors&&(h.colors=t.colors),t.globalCss&&(h.globalCss+=t.globalCss)),document.adoptedStyleSheets.push(ae=T(`html{${Je(h.colors)}}${h.globalCss}`)),h.imports?Promise.allSettled(h.imports.map(e=>{let r=document.createElement("link");return r.rel="stylesheet",r.href=e,document.head.append(r),new Promise((n,o)=>(r.onload=n,r.onerror=o))})).then(W,e=>console.error(e)):W())}window.__cxlRunner=t=>t.type==="figure"?{success:!0,message:"Screenshot should match baseline",data:t}:t.type==="run"?(new z(t).run().catch(e=>console.error(e)),{success:!0,message:"",data:t}):{success:!1,message:`${t.type} not supported.`};var p=`<style>.thumb{vertical-align:middle;display:inline-block;overflow:hidden;width:320px;position:relative;vertical-align:top}
1302
+ `;
1303
+ }
1304
+ var maskStyles = css(buildMask());
1305
+ var globalCss;
1306
+ var themeCss;
1307
+ function observeTheme(host) {
1308
+ let themeOverride;
1309
+ return onThemeChange.tap((theme2) => {
1310
+ const css2 = theme2?.theme.override?.[host.tagName];
1311
+ if (css2) {
1312
+ if (!themeOverride)
1313
+ host.shadowRoot?.adoptedStyleSheets.push(themeOverride ??= newStylesheet(css2));
1314
+ else
1315
+ themeOverride.replace(css2).catch((e) => console.error(e));
1316
+ } else if (themeOverride)
1317
+ themeOverride.replaceSync("");
1318
+ });
1319
+ }
1320
+ function newStylesheet(css2) {
1321
+ const themeCss2 = new CSSStyleSheet();
1322
+ if (css2)
1323
+ themeCss2.replaceSync(css2);
1324
+ return themeCss2;
1325
+ }
1326
+ function css(styles) {
1327
+ let stylesheet;
1328
+ return (host) => {
1329
+ const shadow = getShadow(host);
1330
+ shadow.adoptedStyleSheets.push(stylesheet ??= newStylesheet(styles));
1331
+ if (!host[cssSymbol]) {
1332
+ if (theme.css)
1333
+ shadow.adoptedStyleSheets.unshift(themeCss ??= newStylesheet(theme.css));
1334
+ host[cssSymbol] = true;
1335
+ return observeTheme(host);
1336
+ }
1337
+ };
1338
+ }
1339
+ var surfaceColors = [
1340
+ "background",
1341
+ "primary",
1342
+ "primary-container",
1343
+ "primary-fixed-dim",
1344
+ "primary-fixed",
1345
+ "secondary",
1346
+ "secondary-container",
1347
+ "tertiary",
1348
+ "tertiary-container",
1349
+ "surface",
1350
+ "surface-container",
1351
+ "surface-container-low",
1352
+ "surface-container-lowest",
1353
+ "surface-container-highest",
1354
+ "surface-container-high",
1355
+ "error",
1356
+ "error-container",
1357
+ "success",
1358
+ "success-container",
1359
+ "warning",
1360
+ "warning-container",
1361
+ "inverse-surface",
1362
+ "inverse-primary"
1363
+ ];
1364
+ var SurfaceColorNames = [...surfaceColors, "inherit"];
1365
+ function resetSurface(color, dest = "surface") {
1366
+ return `--cxl-color-${dest}: var(--cxl-color--${color});
1367
+ --cxl-color-on-${dest}: var(--cxl-color--on-${color}, var(--cxl-color--on-surface));
1368
+ --cxl-color-surface-variant: var(--cxl-color--${color === "surface" ? "surface-variant" : color});
1369
+ --cxl-color-on-surface-variant: ${color.includes("surface") ? "var(--cxl-color--on-surface-variant)" : `color-mix(in srgb, var(--cxl-color--on-${color}) 80%, transparent)`};
1370
+ `;
1371
+ }
1372
+ var ColorStyles = surfaceColors.reduce((r, v) => {
1373
+ r[v] = `
1374
+ ${resetSurface(v)}
1375
+ ${v === "inverse-surface" ? resetSurface("inverse-primary", "primary") : ""}
1376
+ `;
1377
+ return r;
1378
+ }, {
1379
+ inherit: "color:inherit;background-color:inherit;"
1380
+ });
1381
+ function font(name) {
1382
+ return `font:var(--cxl-font-${name});letter-spacing:var(--cxl-letter-spacing-${name});`;
1383
+ }
1384
+ var loadingId = requestAnimationFrame(() => applyTheme());
1385
+ var iconTemplate = document.createElement("template");
1386
+ var iconCache = {};
1387
+ function buildIconFactoryCdn(getUrl) {
1388
+ return function(def) {
1389
+ const href = getUrl(def);
1390
+ const cache = iconCache[href];
1391
+ if (cache)
1392
+ return cache.cloneNode(true);
1393
+ const el = document.createElementNS("http://www.w3.org/2000/svg", "svg");
1394
+ const error2 = () => (el.dispatchEvent(new ErrorEvent("error")), "");
1395
+ fetch(href).then((res) => res.ok ? res.text() : error2(), error2).then((svgText) => {
1396
+ if (!svgText)
1397
+ return;
1398
+ iconTemplate.innerHTML = svgText;
1399
+ const svg = iconTemplate.content.children[0];
1400
+ if (!svg)
1401
+ return;
1402
+ const viewbox = svg.getAttribute("viewBox");
1403
+ if (viewbox)
1404
+ el.setAttribute("viewBox", viewbox);
1405
+ else if (svg.hasAttribute("width") && svg.hasAttribute("height"))
1406
+ el.setAttribute("viewBox", `0 0 ${svg.getAttribute("width")} ${svg.getAttribute("height")}`);
1407
+ for (const child of svg.childNodes)
1408
+ el.append(child);
1409
+ iconCache[def.name] = el;
1410
+ }).catch((e) => console.error(e));
1411
+ el.setAttribute("fill", "currentColor");
1412
+ return el;
1413
+ };
1414
+ }
1415
+ var iconFactoryCdn = buildIconFactoryCdn(({ name: id, width, fill }) => {
1416
+ if (width !== 20 && width !== 24 && width !== 40 && width !== 48)
1417
+ width = 48;
1418
+ return `https://cdn.jsdelivr.net/gh/google/material-design-icons@941fa95/symbols/web/${id}/materialsymbolsoutlined/${id}_${fill ? "fill1_" : ""}${width}px.svg`;
1419
+ });
1420
+ var resolveTheme;
1421
+ var themeReady = new Promise((resolve) => {
1422
+ resolveTheme = () => {
1423
+ onThemeChange.next(void 0);
1424
+ resolve();
1425
+ };
1426
+ });
1427
+ function applyTheme(newTheme) {
1428
+ cancelAnimationFrame(loadingId);
1429
+ if (!globalCss) {
1430
+ if (newTheme) {
1431
+ if (newTheme.colors)
1432
+ theme.colors = newTheme.colors;
1433
+ if (newTheme.globalCss)
1434
+ theme.globalCss += newTheme.globalCss;
1435
+ }
1436
+ document.adoptedStyleSheets.push(globalCss = newStylesheet(`html{${buildPalette(theme.colors)}}${theme.globalCss}`));
1437
+ if (theme.imports)
1438
+ Promise.allSettled(theme.imports.map((imp) => {
1439
+ const link = document.createElement("link");
1440
+ link.rel = "stylesheet";
1441
+ link.href = imp;
1442
+ document.head.append(link);
1443
+ return new Promise((resolve, reject) => (link.onload = resolve, link.onerror = reject));
1444
+ })).then(resolveTheme, (e) => console.error(e));
1445
+ else
1446
+ resolveTheme();
1447
+ }
1448
+ }
1449
+
1450
+ // ../spec-browser/index.ts
1451
+ window.__cxlRunner = (data) => {
1452
+ if (data.type === "figure")
1453
+ return {
1454
+ success: true,
1455
+ message: "Screenshot should match baseline",
1456
+ data
1457
+ };
1458
+ if (data.type === "run") {
1459
+ new BrowserRunner(data).run().catch((e) => console.error(e));
1460
+ return {
1461
+ success: true,
1462
+ message: "",
1463
+ data
1464
+ };
1465
+ }
1466
+ return {
1467
+ success: false,
1468
+ message: `${data.type} not supported.`
1469
+ };
1470
+ };
1471
+ var output = `<style>.thumb{vertical-align:middle;display:inline-block;overflow:hidden;width:320px;position:relative;vertical-align:top}
84
1472
  dl { display: flex; margin-top:8px;margin-bottom:8px; } dd { margin-left: 16px}
85
1473
  body {font-family:monospace;font-size:16px;tab-size:4}
86
- </style>`;function it(t,e){p+=`<dl><dt><a data-test="${t}" href="#">${N(e)}</a></dt><dd>`}function st(){p+="</dd></dl>"}var ct=/[&<>]/g,at={"&":"&amp;","<":"&lt;",">":"&gt;"};function N(t){return t.replace(ct,e=>at[e]||"")}function lt(t){p+='<div style="background-color:#ffcdd2;padding:8px">',t instanceof Error?p+=`
87
- <p style="white-space:pre">${N(t.message)}</p>
88
- <pre>${N(t.stack||"")}</pre>
89
- `:p+=`<p style="white-space:pre-wrap">${N(t)}</p>`,p+="</div>"}function ut(){return"&check;"}function ft(){return"&times;"}function pt(t){console.error(t.message),t.stack&&console.error(t.stack);let e=t.message;lt(e)}function dt(t,e="spec"){p+=t.success?ut():ft();let r=t.data;r?.type==="figure"&&(p+=`<div class="thumb">${r.html}</div>
90
- <spec-image-diff src1="spec/${r.name}.png" src2="${e}/${r.name}.png"></cxl-image-diff>`)}function me(t,e){for(let r of t){if(r.id===e)return r;let n=me(r.tests,e);if(n)return n}}async function xt(t,e){let r=e.target.dataset.test;if(r){e.stopPropagation(),e.preventDefault();let n=me(t,+r);n&&(console.log(`Running test "${n.name}"`),n.results=[],await n.run(),console.log(n.results))}}function mt(t){return new Promise((e,r)=>{let n=new Image;n.src=t,n.addEventListener("load",()=>e(n)),n.addEventListener("error",()=>r(n))})}async function xe(t){let e=await mt(t),r=E("canvas"),n=r.getContext("2d");if(!n)throw new Error("Could not create context");let o=r.width=e.width,i=r.height=e.height;return n.drawImage(e,0,0),n.getImageData(0,0,o,i)}function qt(t){let e=new Image;return e.src=t,e}async function ht(t,e){let r=Math.max(t.width,e.width),n=Math.max(t.height,e.height),o=r*n*4,i=new Uint8ClampedArray(o),s=0;for(let c=0;c<o;c+=4){let a=t.data[c]===e.data[c]&&t.data[c+1]===e.data[c+1]&&t.data[c+2]===e.data[c+2]&&t.data[c+3]===e.data[c+3];a||(s+=4),i[c]=i[c+3]=a?0:255}return{imageA:t,imageB:e,diffBytes:s,size:o,diff:new ImageData(i,r,n)}}async function gt(t,e){let[r,n]=await Promise.all([xe(t),xe(e)]);return ht(r,n)}var X=class extends m{src1;src2;ratio=1;hidediff=!1;value};ie(X,{tagName:"spec-image-diff",init:[F("src1"),F("src2"),F("ratio"),ce("hidediff")],augment:[A(`
1474
+ </style>`;
1475
+ function group(testId, title) {
1476
+ output += `<dl><dt><a data-test="${testId}" href="#">${escapeHtml(
1477
+ title
1478
+ )}</a></dt><dd>`;
1479
+ }
1480
+ function groupEnd() {
1481
+ output += "</dd></dl>";
1482
+ }
1483
+ var ENTITIES_REGEX = /[&<>]/g;
1484
+ var ENTITIES_MAP = {
1485
+ "&": "&amp;",
1486
+ "<": "&lt;",
1487
+ ">": "&gt;"
1488
+ };
1489
+ function escapeHtml(str) {
1490
+ return str.replace(
1491
+ ENTITIES_REGEX,
1492
+ (e) => ENTITIES_MAP[e] || ""
1493
+ );
1494
+ }
1495
+ function error(msg) {
1496
+ output += '<div style="background-color:#ffcdd2;padding:8px">';
1497
+ if (msg instanceof Error) {
1498
+ output += `
1499
+ <p style="white-space:pre">${escapeHtml(msg.message)}</p>
1500
+ <pre>${escapeHtml(msg.stack || "")}</pre>
1501
+ `;
1502
+ } else output += `<p style="white-space:pre-wrap">${escapeHtml(msg)}</p>`;
1503
+ output += "</div>";
1504
+ }
1505
+ function success() {
1506
+ return "&check;";
1507
+ }
1508
+ function failure() {
1509
+ return "&times;";
1510
+ }
1511
+ function printError(fail) {
1512
+ console.error(fail.message);
1513
+ if (fail.stack) console.error(fail.stack);
1514
+ const msg = fail.message;
1515
+ error(msg);
1516
+ }
1517
+ function printResult(result, baselinePath = "spec") {
1518
+ output += result.success ? success() : failure();
1519
+ const data = result.data;
1520
+ if (data?.type === "figure") {
1521
+ output += `<div class="thumb">${data.html}</div>
1522
+ <spec-image-diff src1="spec/${data.name}.png" src2="${baselinePath}/${data.name}.png"></cxl-image-diff>`;
1523
+ }
1524
+ }
1525
+ function findTest(tests, id) {
1526
+ for (const test of tests) {
1527
+ if (test.id === id) return test;
1528
+ const childTest = findTest(test.tests, id);
1529
+ if (childTest) return childTest;
1530
+ }
1531
+ }
1532
+ async function onClick(suite, ev) {
1533
+ const testId = ev.target.dataset.test;
1534
+ if (testId) {
1535
+ ev.stopPropagation();
1536
+ ev.preventDefault();
1537
+ const test = findTest(suite, +testId);
1538
+ if (test) {
1539
+ console.log(`Running test "${test.name}"`);
1540
+ test.results = [];
1541
+ await test.run();
1542
+ console.log(test.results);
1543
+ }
1544
+ }
1545
+ }
1546
+ function loadImage(src) {
1547
+ return new Promise((resolve, reject) => {
1548
+ const img = new Image();
1549
+ img.src = src;
1550
+ img.addEventListener("load", () => resolve(img));
1551
+ img.addEventListener("error", () => reject(img));
1552
+ });
1553
+ }
1554
+ async function imageData(srcA) {
1555
+ const A = await loadImage(srcA);
1556
+ const canvasEl = tsx("canvas");
1557
+ const ctx = canvasEl.getContext("2d");
1558
+ if (!ctx) throw new Error("Could not create context");
1559
+ const w = canvasEl.width = A.width;
1560
+ const h = canvasEl.height = A.height;
1561
+ ctx.drawImage(A, 0, 0);
1562
+ return ctx.getImageData(0, 0, w, h);
1563
+ }
1564
+ function image(src) {
1565
+ const result = new Image();
1566
+ result.src = src;
1567
+ return result;
1568
+ }
1569
+ async function imageDataDiff(A, B) {
1570
+ const w = Math.max(A.width, B.width);
1571
+ const h = Math.max(A.height, B.height);
1572
+ const size = w * h * 4;
1573
+ const diff = new Uint8ClampedArray(size);
1574
+ let diffBytes = 0;
1575
+ for (let i = 0; i < size; i += 4) {
1576
+ const match = A.data[i] === B.data[i] && A.data[i + 1] === B.data[i + 1] && A.data[i + 2] === B.data[i + 2] && A.data[i + 3] === B.data[i + 3];
1577
+ if (!match) diffBytes += 4;
1578
+ diff[i] = diff[i + 3] = match ? 0 : 255;
1579
+ }
1580
+ return {
1581
+ imageA: A,
1582
+ imageB: B,
1583
+ diffBytes,
1584
+ size,
1585
+ diff: new ImageData(diff, w, h)
1586
+ };
1587
+ }
1588
+ async function imageDiff(srcA, srcB) {
1589
+ const [A, B] = await Promise.all([imageData(srcA), imageData(srcB)]);
1590
+ return imageDataDiff(A, B);
1591
+ }
1592
+ var ImageDiff = class extends Component {
1593
+ src1;
1594
+ src2;
1595
+ ratio = 1;
1596
+ hidediff = false;
1597
+ value;
1598
+ };
1599
+ component(ImageDiff, {
1600
+ tagName: "spec-image-diff",
1601
+ init: [
1602
+ attribute("src1"),
1603
+ attribute("src2"),
1604
+ attribute("ratio"),
1605
+ styleAttribute("hidediff")
1606
+ ],
1607
+ augment: [
1608
+ css(`
91
1609
  :host {
92
1610
  display: inline-block;
93
1611
  position: relative;
@@ -101,4 +1619,92 @@ ${e==="inverse-surface"?le("inverse-primary","primary"):""}
101
1619
  height: '100%';
102
1620
  }
103
1621
  :host([hidediff]) .diff { opacity: 0 },
104
- `),t=>{let e=document.createElement("canvas");e.className="absolute diff",e.ariaLabel="rendered diff";let r=E("img",{alt:"source a",className:"absolute"}),n=E("img",{alt:"source b",className:"absolute"}),o=e.getContext("2d");function i(){if(!o)throw new Error("No rendering context");!t.src1||!t.src2||(r.src=t.src2,n.src=t.src1,gt(t.src1,t.src2).then(({diff:s})=>{t.style.width=`${e.width=s.width}px`,t.style.height=`${e.height=s.height}px`,o.putImageData(s,0,0)},s=>console.error(s)))}return t.shadowRoot?.append(n,r,e),y(y(P(t,"src1"),P(t,"src2")).raf(i),P(t,"ratio").raf(s=>r.style.opacity=s.toString()))}]});var z=class{suites;baselinePath;constructor(e){this.suites=e.suites,this.baselinePath=e.baselinePath}async runSuite(e){await e.run(),this.renderTestReport(e)}renderTestReport(e){let r=0,n=[],o=e.results;o.forEach(i=>{i.success===!1&&(r++,n.push(i))}),o.length===0&&e.tests.length===0&&e.only.length===0&&(r++,o.push({success:!1,message:"No assertions found"})),it(e.id,`${e.name}${r>0?` (${r} failures)`:""}`),o.forEach(i=>{dt(i,this.baselinePath),i.success||pt(i)}),e.only.length?e.only.forEach(i=>this.renderTestReport(i)):e.tests.forEach(i=>this.renderTestReport(i)),st()}async run(){await Promise.all(this.suites.map(r=>this.runSuite(r)));let e=document.createElement("cxl-content");e.innerHTML=p,e.addEventListener("click",r=>{xt(this.suites,r).catch(n=>console.error(n))}),document.body.appendChild(e)}},Yt=z;export{X as ImageDiff,Yt as default,N as escapeHtml,qt as image,xe as imageData,ht as imageDataDiff,gt as imageDiff,mt as loadImage};
1622
+ `),
1623
+ ($) => {
1624
+ const C = document.createElement("canvas");
1625
+ C.className = "absolute diff";
1626
+ C.ariaLabel = "rendered diff";
1627
+ const A = tsx("img", { alt: "source a", className: "absolute" });
1628
+ const B = tsx("img", { alt: "source b", className: "absolute" });
1629
+ const ctx = C.getContext("2d");
1630
+ function render() {
1631
+ if (!ctx) throw new Error("No rendering context");
1632
+ if (!$.src1 || !$.src2) return;
1633
+ A.src = $.src2;
1634
+ B.src = $.src1;
1635
+ imageDiff($.src1, $.src2).then(
1636
+ ({ diff }) => {
1637
+ $.style.width = `${C.width = diff.width}px`;
1638
+ $.style.height = `${C.height = diff.height}px`;
1639
+ ctx.putImageData(diff, 0, 0);
1640
+ },
1641
+ (e) => console.error(e)
1642
+ );
1643
+ }
1644
+ $.shadowRoot?.append(B, A, C);
1645
+ return merge(
1646
+ merge(get($, "src1"), get($, "src2")).raf(render),
1647
+ get($, "ratio").raf((val) => A.style.opacity = val.toString())
1648
+ );
1649
+ }
1650
+ ]
1651
+ });
1652
+ var BrowserRunner = class {
1653
+ suites;
1654
+ baselinePath;
1655
+ constructor(config) {
1656
+ this.suites = config.suites;
1657
+ this.baselinePath = config.baselinePath;
1658
+ }
1659
+ async runSuite(suite) {
1660
+ await suite.run();
1661
+ this.renderTestReport(suite);
1662
+ }
1663
+ renderTestReport(test) {
1664
+ let failureCount = 0;
1665
+ const failures = [];
1666
+ const results = test.results;
1667
+ results.forEach((r) => {
1668
+ if (r.success === false) {
1669
+ failureCount++;
1670
+ failures.push(r);
1671
+ }
1672
+ });
1673
+ if (results.length === 0 && test.tests.length === 0 && test.only.length === 0) {
1674
+ failureCount++;
1675
+ results.push({ success: false, message: "No assertions found" });
1676
+ }
1677
+ group(
1678
+ test.id,
1679
+ `${test.name}${failureCount > 0 ? ` (${failureCount} failures)` : ""}`
1680
+ );
1681
+ results.forEach((r) => {
1682
+ printResult(r, this.baselinePath);
1683
+ if (!r.success) printError(r);
1684
+ });
1685
+ if (test.only.length)
1686
+ test.only.forEach((test2) => this.renderTestReport(test2));
1687
+ else test.tests.forEach((test2) => this.renderTestReport(test2));
1688
+ groupEnd();
1689
+ }
1690
+ async run() {
1691
+ await Promise.all(this.suites.map((suite) => this.runSuite(suite)));
1692
+ const container = document.createElement("cxl-content");
1693
+ container.innerHTML = output;
1694
+ container.addEventListener("click", (ev) => {
1695
+ onClick(this.suites, ev).catch((e) => console.error(e));
1696
+ });
1697
+ document.body.appendChild(container);
1698
+ }
1699
+ };
1700
+ var index_default = BrowserRunner;
1701
+ export {
1702
+ ImageDiff,
1703
+ index_default as default,
1704
+ escapeHtml,
1705
+ image,
1706
+ imageData,
1707
+ imageDataDiff,
1708
+ imageDiff,
1709
+ loadImage
1710
+ };