@sylwellsoftware/fray 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +448 -985
  2. package/colors/README.md +42 -13
  3. package/dist/Components/app/app.d.ts +38 -0
  4. package/dist/Components/app/app.d.ts.map +1 -0
  5. package/dist/Components/component.d.ts +33 -1
  6. package/dist/Components/component.d.ts.map +1 -1
  7. package/dist/Components/data/descriptionList.d.ts.map +1 -1
  8. package/dist/Components/data/treeview/treeview.d.ts.map +1 -1
  9. package/dist/Components/dialog/dialog.d.ts.map +1 -1
  10. package/dist/Components/layout/groupPanel.d.ts.map +1 -1
  11. package/dist/Components/layout/header.d.ts.map +1 -1
  12. package/dist/Components/layout/optionGroup.d.ts +23 -0
  13. package/dist/Components/layout/optionGroup.d.ts.map +1 -0
  14. package/dist/Components/layout/optionsPanel.d.ts +12 -0
  15. package/dist/Components/layout/optionsPanel.d.ts.map +1 -0
  16. package/dist/Components/layout/panel.d.ts.map +1 -1
  17. package/dist/Components/layout/sidebar.d.ts.map +1 -1
  18. package/dist/Components/layout/splitView.d.ts.map +1 -1
  19. package/dist/Components/lineinputs/CheckableControl.d.ts.map +1 -1
  20. package/dist/Components/lineinputs/dropdown.d.ts.map +1 -1
  21. package/dist/Components/lineinputs/radio.d.ts.map +1 -1
  22. package/dist/Components/lineinputs/toggle.d.ts.map +1 -1
  23. package/dist/Components/status/progressBar.d.ts.map +1 -1
  24. package/dist/index.d.ts +4 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +1159 -941
  27. package/dist/index.js.map +1 -1
  28. package/dist/{jsx-dev-runtime-8s_xIag_.js → jsx-dev-runtime-C7dc8ZyF.js} +3 -1
  29. package/dist/jsx-dev-runtime-C7dc8ZyF.js.map +1 -0
  30. package/dist/jsx-dev-runtime.js +1 -1
  31. package/dist/jsx-runtime.js +1 -1
  32. package/package.json +16 -14
  33. package/styles/structural.css +19 -14
  34. package/themes/README.md +46 -22
  35. package/themes/base.css +4 -4
  36. package/themes/shiny/theme.css +2 -0
  37. package/dist/jsx-dev-runtime-8s_xIag_.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,16 +1,16 @@
1
- var Mt = Object.defineProperty;
2
- var Ht = (t, r, e) => r in t ? Mt(t, r, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[r] = e;
3
- var a = (t, r, e) => Ht(t, typeof r != "symbol" ? r + "" : r, e);
4
- import { C as g, j as p, c as E, h as w, F as Ie, a as v, i as we } from "./jsx-dev-runtime-8s_xIag_.js";
5
- import { b as to, S as ro, d as io, e as oo, f as so, g as no, k as ao, l as lo, m as co, n as uo, p as ho, s as po } from "./jsx-dev-runtime-8s_xIag_.js";
6
- import { Emitter as I, DerivedEmitter as Te, FetchState as S, QueryArg as bt, LiveQuery as Vt, RestQueryHandler as Ut } from "@sylwellsoftware/glue";
7
- class Ye extends g {
1
+ var _t = Object.defineProperty;
2
+ var Qt = (t, r, e) => r in t ? _t(t, r, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[r] = e;
3
+ var a = (t, r, e) => Qt(t, typeof r != "symbol" ? r + "" : r, e);
4
+ import { C as g, j as h, c as w, h as se, F as Ie, a as y, i as we, b as Bt } from "./jsx-dev-runtime-C7dc8ZyF.js";
5
+ import { S as uo, d as ho, e as po, f as fo, g as mo, k as bo, l as go, m as yo, n as wo, p as vo, s as Eo } from "./jsx-dev-runtime-C7dc8ZyF.js";
6
+ import { Emitter as S, DerivedEmitter as Te, FetchState as k, QueryArg as gt, LiveQuery as Wt, RestQueryHandler as Gt } from "@sylwellsoftware/glue";
7
+ class Je extends g {
8
8
  render() {
9
9
  return this.props.children ?? [];
10
10
  }
11
11
  }
12
- a(Ye, "liveProps", []);
13
- const y = {
12
+ a(Je, "liveProps", []);
13
+ const v = {
14
14
  /** Deny mode: Excludes items that match the filter. */
15
15
  Deny: "deny",
16
16
  /** Require mode: Includes only items that match the filter. */
@@ -21,29 +21,29 @@ const y = {
21
21
  Neutral: "neutral"
22
22
  };
23
23
  function Re(t) {
24
- return Object.values(y).some((r) => r === t);
24
+ return Object.values(v).some((r) => r === t);
25
25
  }
26
- let _t = 1;
27
- function R(t, r) {
28
- return r != null && String(r).length > 0 ? String(r) : `fray-${t}-${_t++}`;
26
+ let Yt = 1;
27
+ function I(t, r) {
28
+ return r != null && String(r).length > 0 ? String(r) : `fray-${t}-${Yt++}`;
29
29
  }
30
- function F(t, r, e, i) {
30
+ function L(t, r, e, i) {
31
31
  if (r.valueEmitter != null)
32
- return Qt(r.valueEmitter, "valueEmitter"), r.valueEmitter;
32
+ return Jt(r.valueEmitter, "valueEmitter"), r.valueEmitter;
33
33
  const o = r.defaultValue ?? r.value ?? r.initialValue ?? e, s = { owner: t, purpose: i };
34
- return new I(o, s);
34
+ return new S(o, s);
35
35
  }
36
- function Qt(t, r = "emitter") {
36
+ function Jt(t, r = "emitter") {
37
37
  if (t == null || typeof t != "object" && typeof t != "function" || typeof Reflect.get(t, "get") != "function" || typeof Reflect.get(t, "set") != "function" || typeof Reflect.get(t, "subscribe") != "function")
38
38
  throw new TypeError(`${r} must be an emitter`);
39
39
  }
40
- function Bt(...t) {
40
+ function Zt(...t) {
41
41
  return t.flatMap((r) => typeof r == "string" ? r.split(/\s+/) : []).filter(Boolean).join(" ");
42
42
  }
43
- function x(t) {
43
+ function E(t) {
44
44
  return t.className ?? t.class ?? "";
45
45
  }
46
- function $(t, ...r) {
46
+ function z(t, ...r) {
47
47
  if (t != null) {
48
48
  if (typeof t != "function") throw new TypeError("Control callback must be a function");
49
49
  t(...r);
@@ -52,7 +52,7 @@ function $(t, ...r) {
52
52
  function ve(t, r = "options") {
53
53
  if (!Array.isArray(t)) throw new TypeError(`${r} must be an array`);
54
54
  }
55
- function Wt(t) {
55
+ function Xt(t) {
56
56
  return Re(t) ? t : String(t);
57
57
  }
58
58
  class X extends g {
@@ -62,9 +62,9 @@ class X extends g {
62
62
  a(this, "valueEmitter");
63
63
  a(this, "activeTabEmitter");
64
64
  const i = e.tabs ?? [];
65
- gt(i);
65
+ yt(i);
66
66
  const o = { ...e };
67
- o.valueEmitter == null && e.activeTabEmitter != null && (o.valueEmitter = e.activeTabEmitter), o.defaultValue == null && e.initialActiveTabId != null && (o.defaultValue = e.initialActiveTabId), this.valueEmitter = F(
67
+ o.valueEmitter == null && e.activeTabEmitter != null && (o.valueEmitter = e.activeTabEmitter), o.defaultValue == null && e.initialActiveTabId != null && (o.defaultValue = e.initialActiveTabId), this.valueEmitter = L(
68
68
  this,
69
69
  o,
70
70
  ((s = i.find((n) => !n.disabled)) == null ? void 0 : s.id) ?? null,
@@ -75,27 +75,27 @@ class X extends g {
75
75
  this.watch(this.valueEmitter);
76
76
  }
77
77
  selectTab(e, i = null) {
78
- e == null || e.disabled || (this.props.onSelectTab == null ? this.valueEmitter.set(e.id, "tab selected") : this.props.onSelectTab(e, i), $(this.props.onChange, e.id, i));
78
+ e == null || e.disabled || (this.props.onSelectTab == null ? this.valueEmitter.set(e.id, "tab selected") : this.props.onSelectTab(e, i), z(this.props.onChange, e.id, i));
79
79
  }
80
80
  render() {
81
81
  const { tabs: e = [], label: i = "Sections", baseId: o = "fray-tabs" } = this.props;
82
- gt(e);
82
+ yt(e);
83
83
  const s = this.valueEmitter.get(), n = this.Host;
84
- return /* @__PURE__ */ p(
84
+ return /* @__PURE__ */ h(
85
85
  n,
86
86
  {
87
87
  role: "tablist",
88
- className: x(this.props) || null,
88
+ className: E(this.props) || null,
89
89
  "aria-label": i,
90
- children: e.map((l, c) => /* @__PURE__ */ p(
90
+ children: e.map((l, c) => /* @__PURE__ */ h(
91
91
  "button",
92
92
  {
93
- id: Ot(o, l.id),
93
+ id: qt(o, l.id),
94
94
  type: "button",
95
95
  role: "tab",
96
96
  disabled: !!l.disabled,
97
97
  "aria-selected": Object.is(s, l.id) ? "true" : "false",
98
- "aria-controls": At(o, l.id),
98
+ "aria-controls": Nt(o, l.id),
99
99
  tabIndex: Object.is(s, l.id) ? 0 : -1,
100
100
  onClick: (u) => this.selectTab(l, u),
101
101
  onKeyDown: (u) => this.handleKeyDown(u, c, e),
@@ -127,7 +127,7 @@ class X extends g {
127
127
  }
128
128
  }
129
129
  }
130
- a(X, "liveProps", []), a(X, "hostName", "tab-line"), a(X, "css", E`
130
+ a(X, "liveProps", []), a(X, "hostName", "tab-line"), a(X, "css", w`
131
131
  & {
132
132
  display: flex;
133
133
  background: var(--tabline-background);
@@ -191,16 +191,16 @@ a(X, "liveProps", []), a(X, "hostName", "tab-line"), a(X, "css", E`
191
191
  }
192
192
 
193
193
  `);
194
- function Ot(t, r) {
195
- return `${t}-tab-${jt(r)}`;
194
+ function qt(t, r) {
195
+ return `${t}-tab-${Lt(r)}`;
196
196
  }
197
- function At(t, r) {
198
- return `${t}-panel-${jt(r)}`;
197
+ function Nt(t, r) {
198
+ return `${t}-panel-${Lt(r)}`;
199
199
  }
200
- function jt(t) {
200
+ function Lt(t) {
201
201
  return encodeURIComponent(String(t)).replaceAll("%", "-");
202
202
  }
203
- function gt(t) {
203
+ function yt(t) {
204
204
  if (!Array.isArray(t)) throw new TypeError("TabLine tabs must be an array");
205
205
  const r = /* @__PURE__ */ new Set();
206
206
  for (const e of t) {
@@ -220,7 +220,7 @@ class Ee extends g {
220
220
  this.closeScope = e.openScope(this.props.context, this);
221
221
  }
222
222
  render() {
223
- return w(Ie, null, this.props.children ?? []);
223
+ return se(Ie, null, this.props.children ?? []);
224
224
  }
225
225
  afterMount() {
226
226
  var e;
@@ -235,7 +235,7 @@ class Ee extends g {
235
235
  }
236
236
  }
237
237
  a(Ee, "liveProps", []);
238
- class ne extends g {
238
+ class ae extends g {
239
239
  constructor(e = {}) {
240
240
  var s;
241
241
  super(e);
@@ -243,35 +243,35 @@ class ne extends g {
243
243
  a(this, "activeTabEmitter");
244
244
  a(this, "baseId");
245
245
  a(this, "routeContexts", /* @__PURE__ */ new Map());
246
- const i = Z(e), o = { ...e };
247
- o.valueEmitter == null && e.activeTabEmitter != null && (o.valueEmitter = e.activeTabEmitter), o.defaultValue == null && e.initialActiveTabId != null && (o.defaultValue = e.initialActiveTabId), this.valueEmitter = F(
246
+ const i = J(e), o = { ...e };
247
+ o.valueEmitter == null && e.activeTabEmitter != null && (o.valueEmitter = e.activeTabEmitter), o.defaultValue == null && e.initialActiveTabId != null && (o.defaultValue = e.initialActiveTabId), this.valueEmitter = L(
248
248
  this,
249
249
  o,
250
250
  ((s = i.find((n) => !n.disabled)) == null ? void 0 : s.id) ?? null,
251
251
  "active tab"
252
- ), this.activeTabEmitter = this.valueEmitter, this.baseId = R("tabs", e.id);
252
+ ), this.activeTabEmitter = this.valueEmitter, this.baseId = I("tabs", e.id);
253
253
  }
254
254
  initialize() {
255
255
  var i;
256
- const e = Z(this.props);
256
+ const e = J(this.props);
257
257
  e.some(({ id: o }) => Object.is(o, this.valueEmitter.get())) || this.valueEmitter.set(((i = e.find((o) => !o.disabled)) == null ? void 0 : i.id) ?? null), this.registerRoutes(e), this.watch(this.valueEmitter);
258
258
  }
259
259
  setProps(e) {
260
260
  var o;
261
261
  super.setProps(e);
262
- const i = Z(e);
262
+ const i = J(e);
263
263
  return i.some(({ id: s }) => Object.is(s, this.valueEmitter.get())) || this.valueEmitter.set(((o = i.find((s) => !s.disabled)) == null ? void 0 : o.id) ?? null), this.registerRoutes(i), this;
264
264
  }
265
265
  render() {
266
266
  var s;
267
- const e = Z(this.props), i = (s = e.find(({ id: n }) => Object.is(n, this.valueEmitter.get())) ?? e.find((n) => !n.disabled) ?? null) == null ? void 0 : s.id, o = this.Host;
268
- return /* @__PURE__ */ v(
267
+ const e = J(this.props), i = (s = e.find(({ id: n }) => Object.is(n, this.valueEmitter.get())) ?? e.find((n) => !n.disabled) ?? null) == null ? void 0 : s.id, o = this.Host;
268
+ return /* @__PURE__ */ y(
269
269
  o,
270
270
  {
271
271
  id: this.baseId,
272
- className: x(this.props) || null,
272
+ className: E(this.props) || null,
273
273
  children: [
274
- /* @__PURE__ */ p(
274
+ /* @__PURE__ */ h(
275
275
  X,
276
276
  {
277
277
  tabs: e.map(({ id: n, label: l, disabled: c }) => ({ id: n, label: l, disabled: c })),
@@ -285,12 +285,12 @@ class ne extends g {
285
285
  ),
286
286
  e.map((n) => {
287
287
  const l = Object.is(i, n.id);
288
- return /* @__PURE__ */ p(
288
+ return /* @__PURE__ */ h(
289
289
  "section",
290
290
  {
291
- id: At(this.baseId, n.id),
291
+ id: Nt(this.baseId, n.id),
292
292
  role: "tabpanel",
293
- "aria-labelledby": Ot(this.baseId, n.id),
293
+ "aria-labelledby": qt(this.baseId, n.id),
294
294
  tabIndex: l ? 0 : -1,
295
295
  hidden: !l,
296
296
  children: this.routedContent(n)
@@ -328,15 +328,15 @@ class ne extends g {
328
328
  }
329
329
  selectTab(e, i) {
330
330
  var n;
331
- const o = Z(this.props).find(({ id: l }) => Object.is(l, e.id)), s = (o == null ? void 0 : o.route) == null ? null : this.routeContexts.get(o.route);
331
+ const o = J(this.props).find(({ id: l }) => Object.is(l, e.id)), s = (o == null ? void 0 : o.route) == null ? null : this.routeContexts.get(o.route);
332
332
  s == null ? this.valueEmitter.set(e.id, "tab selected") : (n = this._runtime.router) == null || n.navigate(s);
333
333
  }
334
334
  routedContent(e) {
335
335
  const i = e.route == null ? null : this.routeContexts.get(e.route);
336
- return i == null ? e.content : /* @__PURE__ */ p(Ee, { context: i, children: e.content }, i.pathname);
336
+ return i == null ? e.content : /* @__PURE__ */ h(Ee, { context: i, children: e.content }, i.pathname);
337
337
  }
338
338
  }
339
- a(ne, "liveProps", []), a(ne, "dependencies", [Ee, X, Ye]), a(ne, "hostName", "tab-panel"), a(ne, "css", E`
339
+ a(ae, "liveProps", []), a(ae, "dependencies", [Ee, X, Je]), a(ae, "hostName", "tab-panel"), a(ae, "css", w`
340
340
  & {
341
341
  background: var(--panel-background);
342
342
  border-radius: var(--panel-radius);
@@ -367,10 +367,10 @@ a(ne, "liveProps", []), a(ne, "dependencies", [Ee, X, Ye]), a(ne, "hostName", "t
367
367
  margin-inline-start: -3px;
368
368
  }
369
369
  `);
370
- function Z(t) {
370
+ function J(t) {
371
371
  const r = t.tabs ?? [];
372
372
  if (!Array.isArray(r)) throw new TypeError("TabPanel tabs must be an array");
373
- const i = (Array.isArray(t.children) ? t.children : t.children == null ? [] : [t.children]).filter((n) => we(n) && n.type === Ye).map((n, l) => {
373
+ const i = (Array.isArray(t.children) ? t.children : t.children == null ? [] : [t.children]).filter((n) => we(n) && n.type === Je).map((n, l) => {
374
374
  if (!we(n)) throw new TypeError("TabPanel children must be Tab nodes");
375
375
  const c = n.props;
376
376
  return {
@@ -394,29 +394,115 @@ function Z(t) {
394
394
  }
395
395
  return o;
396
396
  }
397
- class L extends g {
397
+ class wt extends g {
398
+ mount(r = null, e = null) {
399
+ if (r != null) {
400
+ const i = Ft(r, "FrayApp.mount"), o = this.constructor;
401
+ this._runtime.registerStyles(o).injectStyles(i);
402
+ }
403
+ return super.mount(r, e);
404
+ }
405
+ renderContent() {
406
+ return this.props.children ?? null;
407
+ }
408
+ render() {
409
+ const {
410
+ children: r,
411
+ key: e,
412
+ class: i,
413
+ className: o,
414
+ island: s,
415
+ sizing: n = "embedded",
416
+ landmark: l = "main",
417
+ ...c
418
+ } = this.props, u = this.Host, p = rr(i, o, er(n));
419
+ return /* @__PURE__ */ h(
420
+ u,
421
+ {
422
+ ...c,
423
+ role: tr(l),
424
+ ...p == null ? {} : { className: p },
425
+ children: this.renderContent()
426
+ }
427
+ );
428
+ }
429
+ }
430
+ a(wt, "hostName", "app"), a(wt, "css", w`
431
+ & {
432
+ box-sizing: border-box;
433
+ display: block;
434
+ background: var(--application-background);
435
+ color: var(--ui-color);
436
+ font-family: var(--font-family);
437
+ font-size: var(--font-size);
438
+ line-height: var(--line-height);
439
+ }
440
+ `);
441
+ function Li(t, r, e, ...i) {
442
+ if (!(t instanceof Bt))
443
+ throw new TypeError("mountFrayApp requires a FrayRuntime");
444
+ const o = Ft(e, "mountFrayApp");
445
+ return t.registerStyles(r).injectStyles(o), t.mount(t.create(r, ...i), e);
446
+ }
447
+ function Ft(t, r) {
448
+ if (t == null || typeof t != "object" || !("ownerDocument" in t))
449
+ throw new TypeError(`${r} requires a DOM parent node`);
450
+ const e = t.ownerDocument ?? (t.nodeType === 9 ? t : null);
451
+ if ((e == null ? void 0 : e.head) == null)
452
+ throw new TypeError(`${r} requires a parent associated with a document head`);
453
+ return e;
454
+ }
455
+ function er(t) {
456
+ switch (t) {
457
+ case "embedded":
458
+ return;
459
+ case "viewport-width":
460
+ return "fray-fill-horizontal";
461
+ case "viewport-height":
462
+ return "fray-fill-vertical";
463
+ case "viewport":
464
+ return "fray-fill-horizontal fray-fill-vertical";
465
+ default:
466
+ throw new TypeError(
467
+ "FrayApp sizing must be embedded, viewport-width, viewport-height, or viewport"
468
+ );
469
+ }
470
+ }
471
+ function tr(t) {
472
+ if (t === "main") return "main";
473
+ if (t === "none") return null;
474
+ throw new TypeError("FrayApp landmark must be main or none");
475
+ }
476
+ function rr(...t) {
477
+ const r = t.flatMap((e) => (e == null ? void 0 : e.trim().split(/\s+/)) ?? []).filter(Boolean).join(" ");
478
+ return r.length === 0 ? void 0 : r;
479
+ }
480
+ class N extends g {
398
481
  constructor(e = {}) {
399
482
  super(e);
400
483
  a(this, "headerId");
401
484
  a(this, "headingId");
402
- this.headerId = R("header", e.id), this.headingId = R("header-title", e.headingId ?? `${this.headerId}-title`);
485
+ this.headerId = I("header", e.id), this.headingId = I("header-title", e.headingId ?? `${this.headerId}-title`);
403
486
  }
404
487
  render() {
405
488
  const { level: e = 2, children: i = [] } = this.props;
406
489
  if (!Number.isInteger(e) || e < 1 || e > 6)
407
490
  throw new TypeError("Header level must be an integer from 1 to 6");
408
491
  const o = this.Host;
409
- return /* @__PURE__ */ p(
492
+ return /* @__PURE__ */ h(
410
493
  o,
411
494
  {
412
495
  id: this.headerId,
413
- className: x(this.props) || null,
414
- children: w(`h${e}`, { id: this.headingId }, i)
496
+ className: E(this.props) || null,
497
+ children: (() => {
498
+ const s = `h${e}`;
499
+ return /* @__PURE__ */ h(s, { id: this.headingId, children: i });
500
+ })()
415
501
  }
416
502
  );
417
503
  }
418
504
  }
419
- a(L, "liveProps", []), a(L, "hostName", "header"), a(L, "css", E`
505
+ a(N, "liveProps", []), a(N, "hostName", "header"), a(N, "css", w`
420
506
  & {
421
507
  display: block;
422
508
  color: var(--section-header-color);
@@ -437,12 +523,12 @@ a(L, "liveProps", []), a(L, "hostName", "header"), a(L, "css", E`
437
523
  font: inherit;
438
524
  }
439
525
  `);
440
- class ae extends g {
526
+ class Z extends g {
441
527
  constructor(e) {
442
528
  super(e);
443
529
  a(this, "panelId");
444
530
  a(this, "headerId");
445
- this.panelId = R("group-panel", e.id), this.headerId = `${this.panelId}-title`;
531
+ this.panelId = I("group-panel", e.id), this.headerId = `${this.panelId}-title`;
446
532
  }
447
533
  render() {
448
534
  const { header: e, children: i = [] } = this.props;
@@ -450,38 +536,37 @@ class ae extends g {
450
536
  }
451
537
  renderGroupPanel(e, i) {
452
538
  const o = this.Host;
453
- return /* @__PURE__ */ v(
539
+ return /* @__PURE__ */ y(
454
540
  o,
455
541
  {
456
542
  id: this.panelId,
457
543
  role: "group",
458
- className: x(this.props) || null,
544
+ className: E(this.props) || null,
459
545
  "aria-labelledby": this.headerId,
460
546
  children: [
461
- /* @__PURE__ */ p(
462
- L,
547
+ /* @__PURE__ */ h(
548
+ N,
463
549
  {
464
550
  id: `${this.panelId}-header`,
465
551
  headingId: this.headerId,
466
552
  children: e
467
553
  }
468
554
  ),
469
- w("fray-content", null, i)
555
+ /* @__PURE__ */ h("fray-content", { children: i })
470
556
  ]
471
557
  }
472
558
  );
473
559
  }
474
560
  }
475
- a(ae, "liveProps", []), a(ae, "hostName", "group-panel"), a(ae, "dependencies", [L]), a(ae, "css", E`
561
+ a(Z, "liveProps", []), a(Z, "hostName", "group-panel"), a(Z, "dependencies", [N]), a(Z, "css", w`
476
562
  & {
477
- display: grid;
478
- grid-template-columns: 1.5rem minmax(0, 1fr);
563
+ display: flex;
564
+ flex-flow: row nowrap;
479
565
  align-items: stretch;
480
566
  box-sizing: border-box;
481
567
  min-width: 0;
482
568
  min-height: 0;
483
569
  column-gap: 0.35rem;
484
- row-gap: 0;
485
570
  padding-block: 0.125rem;
486
571
  padding-inline: 0.125rem 0.35rem;
487
572
  border: 1px solid var(--ui-border-color);
@@ -492,38 +577,154 @@ a(ae, "liveProps", []), a(ae, "hostName", "group-panel"), a(ae, "dependencies",
492
577
  display: grid;
493
578
  place-items: center;
494
579
  box-sizing: border-box;
495
- width: 100%;
580
+ width: 1.7em;
496
581
  min-width: 0;
497
582
  min-height: 0;
498
583
  padding: 0.125em;
499
584
  border-radius: var(--ui-border-radius);
500
- }
501
-
502
- & > fray-header > h1,
503
- & > fray-header > h2,
504
- & > fray-header > h3,
505
- & > fray-header > h4,
506
- & > fray-header > h5,
507
- & > fray-header > h6 {
508
- font-weight: 650;
509
- white-space: nowrap;
510
585
  writing-mode: vertical-rl;
511
586
  transform: rotate(180deg);
587
+ font-weight: normal;
588
+ font-size: var(--ui-font-size);
512
589
  }
513
590
 
514
591
  & > fray-content {
515
592
  display: block;
516
593
  min-width: 0;
517
594
  min-height: 0;
595
+ margin-left: .25em;
518
596
  }
519
597
  `);
520
- const Gt = ["disabled"];
598
+ class ze extends g {
599
+ constructor(e) {
600
+ super(e);
601
+ a(this, "groupId");
602
+ a(this, "errorId");
603
+ this.groupId = I("option-group", e.id), this.errorId = `${this.groupId}-error`;
604
+ }
605
+ render() {
606
+ return this.renderOptionGroup(this.props.children ?? []);
607
+ }
608
+ renderOptionGroup(e) {
609
+ const i = this.Host, {
610
+ label: o,
611
+ ariaLabel: s,
612
+ headerEnd: n = null,
613
+ disabled: l = !1,
614
+ required: c = !1,
615
+ error: u = null
616
+ } = this.props;
617
+ return /* @__PURE__ */ y(i, { className: E(this.props) || null, children: [
618
+ /* @__PURE__ */ y(
619
+ "fieldset",
620
+ {
621
+ id: this.groupId,
622
+ disabled: l,
623
+ "aria-label": o == null ? s : null,
624
+ "aria-required": c ? "true" : null,
625
+ "aria-invalid": u == null ? null : "true",
626
+ "aria-describedby": u == null ? null : this.errorId,
627
+ children: [
628
+ o != null || n != null ? /* @__PURE__ */ y("legend", { children: [
629
+ o != null ? /* @__PURE__ */ h("span", { children: o }) : null,
630
+ n
631
+ ] }) : null,
632
+ e
633
+ ]
634
+ }
635
+ ),
636
+ u == null ? null : /* @__PURE__ */ h(
637
+ "p",
638
+ {
639
+ id: this.errorId,
640
+ role: "alert",
641
+ children: String(u)
642
+ }
643
+ )
644
+ ] });
645
+ }
646
+ }
647
+ a(ze, "liveProps", []), a(ze, "hostName", "option-group"), a(ze, "css", w`
648
+ & {
649
+ display: block;
650
+ min-width: 0;
651
+ }
652
+
653
+ & > fieldset {
654
+ margin: 0;
655
+ padding: 0;
656
+ min-inline-size: 0;
657
+ border: 0;
658
+ width: 100%;
659
+ }
660
+
661
+ & > fieldset > legend {
662
+ display: flex;
663
+ justify-content: space-between;
664
+ align-items: center;
665
+ box-sizing: border-box;
666
+ gap: 0.5rem;
667
+ width: 100%;
668
+ padding: 0 0 0.25em;
669
+ margin-bottom: 0.5em;
670
+ border-bottom: 1px solid var(--ui-border-color);
671
+ font: inherit;
672
+ }
673
+
674
+ & > fieldset > legend > span {
675
+ flex: 1;
676
+ min-width: 0;
677
+ }
678
+
679
+ & > p[role="alert"] {
680
+ margin: 0.25em 0 0;
681
+ }
682
+ `);
683
+ class vt extends Z {
684
+ }
685
+ a(vt, "hostName", "options-panel"), a(vt, "css", w`
686
+ & > fray-content {
687
+ display: flex;
688
+ flex-direction: column;
689
+ align-self: stretch;
690
+ flex: 1 1 0;
691
+ gap: .5em;
692
+ }
693
+
694
+ & > fray-content * > fieldset > legend {
695
+ display: flex;
696
+ justify-content: space-between;
697
+ align-items: center;
698
+ box-sizing: border-box;
699
+ font-size: var(--ui-font-size);
700
+ color: var(--palette-neutral-950);
701
+ gap: 0.5rem;
702
+ width: 100%;
703
+ padding: 0 0 0.25em;
704
+ margin-bottom: 0.25em;
705
+ border-bottom: 1px solid var(--ui-border-color);
706
+ }
707
+
708
+ & > fray-content * > fieldset {
709
+ display: flex;
710
+ flex-flow: column;
711
+ justify-content: stretch;
712
+ justify-items: stretch;
713
+ align-items: stretch;
714
+ align-content: stretch;
715
+ box-sizing: border-box;
716
+ width: 100%;
717
+ gap: 0;
718
+ padding: .25em 0 .5em 0;
719
+ }
720
+ `);
721
+ const ir = ["disabled"];
521
722
  class le extends g {
522
723
  constructor(e = {}) {
523
724
  super(e);
524
725
  a(this, "panelId");
525
726
  a(this, "headerId");
526
- this.panelId = R("panel", e.id), this.headerId = `${this.panelId}-title`;
727
+ this.panelId = I("panel", e.id), this.headerId = `${this.panelId}-title`;
527
728
  }
528
729
  render() {
529
730
  const {
@@ -535,32 +736,32 @@ class le extends g {
535
736
  } = this.props;
536
737
  if (!["horizontal", "vertical"].includes(s))
537
738
  throw new TypeError("Panel orientation must be horizontal or vertical");
538
- const l = this.Host, c = e == null ? null : /* @__PURE__ */ p(
539
- L,
739
+ const l = this.Host, c = e == null ? null : /* @__PURE__ */ h(
740
+ N,
540
741
  {
541
742
  id: `${this.panelId}-header`,
542
743
  headingId: this.headerId,
543
744
  children: e
544
745
  }
545
746
  );
546
- return /* @__PURE__ */ v(
747
+ return /* @__PURE__ */ y(
547
748
  l,
548
749
  {
549
750
  id: this.panelId,
550
751
  role: e == null ? null : "region",
551
- className: x(this.props),
752
+ className: E(this.props),
552
753
  "aria-disabled": n ? "true" : null,
553
754
  "aria-labelledby": e == null ? null : this.headerId,
554
755
  children: [
555
756
  c,
556
757
  i,
557
- w("fray-content", { className: s }, o)
758
+ /* @__PURE__ */ h("fray-content", { className: s, children: o })
558
759
  ]
559
760
  }
560
761
  );
561
762
  }
562
763
  }
563
- a(le, "liveProps", Gt), a(le, "hostName", "panel"), a(le, "dependencies", [L]), a(le, "css", E`
764
+ a(le, "liveProps", ir), a(le, "hostName", "panel"), a(le, "dependencies", [N]), a(le, "css", w`
564
765
  & {
565
766
  background: var(--panel-background);
566
767
  border: var(--panel-border);
@@ -598,7 +799,7 @@ class ce extends g {
598
799
  super(e);
599
800
  a(this, "sidebarId");
600
801
  a(this, "headerId");
601
- this.sidebarId = R("sidebar", e.id), this.headerId = `${this.sidebarId}-title`;
802
+ this.sidebarId = I("sidebar", e.id), this.headerId = `${this.sidebarId}-title`;
602
803
  }
603
804
  render() {
604
805
  const {
@@ -606,15 +807,15 @@ class ce extends g {
606
807
  toolbar: i = null,
607
808
  ariaLabel: o,
608
809
  children: s = []
609
- } = this.props, n = this.Host, l = e == null ? null : /* @__PURE__ */ p(
610
- L,
810
+ } = this.props, n = this.Host, l = e == null ? null : /* @__PURE__ */ h(
811
+ N,
611
812
  {
612
813
  id: `${this.sidebarId}-header`,
613
814
  headingId: this.headerId,
614
815
  children: e
615
816
  }
616
817
  );
617
- return /* @__PURE__ */ p(n, { className: x(this.props) || null, children: /* @__PURE__ */ v(
818
+ return /* @__PURE__ */ h(n, { className: E(this.props) || null, children: /* @__PURE__ */ y(
618
819
  "aside",
619
820
  {
620
821
  id: this.sidebarId,
@@ -622,14 +823,14 @@ class ce extends g {
622
823
  "aria-labelledby": e == null ? null : this.headerId,
623
824
  children: [
624
825
  l,
625
- i == null ? null : w("fray-toolbarcontent", null, i),
626
- w("fray-content", { tabIndex: 0 }, s)
826
+ i == null ? null : /* @__PURE__ */ h("fray-toolbarcontent", { children: i }),
827
+ /* @__PURE__ */ h("fray-content", { tabIndex: 0, children: s })
627
828
  ]
628
829
  }
629
830
  ) });
630
831
  }
631
832
  }
632
- a(ce, "liveProps", []), a(ce, "hostName", "sidebar"), a(ce, "dependencies", [L]), a(ce, "css", E`
833
+ a(ce, "liveProps", []), a(ce, "hostName", "sidebar"), a(ce, "dependencies", [N]), a(ce, "css", w`
633
834
  & {
634
835
  display: flex;
635
836
  min-width: 0;
@@ -656,7 +857,7 @@ a(ce, "liveProps", []), a(ce, "hostName", "sidebar"), a(ce, "dependencies", [L])
656
857
  overflow: auto;
657
858
  }
658
859
  `);
659
- class ze extends g {
860
+ class $e extends g {
660
861
  render() {
661
862
  const {
662
863
  primary: r = null,
@@ -671,28 +872,36 @@ class ze extends g {
671
872
  if (o != null && (typeof o != "string" || o.length === 0))
672
873
  throw new TypeError("SplitView primarySize must be a non-empty CSS size");
673
874
  const l = this.Host;
674
- return /* @__PURE__ */ v(
875
+ return /* @__PURE__ */ y(
675
876
  l,
676
877
  {
677
- className: Bt(x(this.props), i),
878
+ className: Zt(E(this.props), i),
678
879
  style: o == null ? void 0 : { "--split-primary-size": o },
679
880
  children: [
680
- w("fray-primary", {
681
- role: s == null ? null : "region",
682
- "aria-label": s,
683
- tabIndex: 0
684
- }, r),
685
- w("fray-secondary", {
686
- role: n == null ? null : "region",
687
- "aria-label": n,
688
- tabIndex: 0
689
- }, e ?? this.props.children ?? [])
881
+ /* @__PURE__ */ h(
882
+ "fray-primary",
883
+ {
884
+ role: s == null ? null : "region",
885
+ "aria-label": s,
886
+ tabIndex: 0,
887
+ children: r
888
+ }
889
+ ),
890
+ /* @__PURE__ */ h(
891
+ "fray-secondary",
892
+ {
893
+ role: n == null ? null : "region",
894
+ "aria-label": n,
895
+ tabIndex: 0,
896
+ children: e ?? this.props.children ?? []
897
+ }
898
+ )
690
899
  ]
691
900
  }
692
901
  );
693
902
  }
694
903
  }
695
- a(ze, "liveProps", []), a(ze, "hostName", "split-view"), a(ze, "css", E`
904
+ a($e, "liveProps", []), a($e, "hostName", "split-view"), a($e, "css", w`
696
905
  & {
697
906
  display: flex;
698
907
  flex: 1 1 auto;
@@ -732,23 +941,23 @@ a(ze, "liveProps", []), a(ze, "hostName", "split-view"), a(ze, "css", E`
732
941
  border-block-end: 1px solid var(--ui-border-color);
733
942
  }
734
943
  `);
735
- class qt extends g {
944
+ class Dt extends g {
736
945
  render() {
737
946
  const { term: r, value: e, children: i = [] } = this.props;
738
947
  return [
739
- w("dt", null, r),
740
- w("dd", null, e ?? i)
948
+ /* @__PURE__ */ h("dt", { children: r }),
949
+ /* @__PURE__ */ h("dd", { children: e ?? i })
741
950
  ];
742
951
  }
743
952
  }
744
- a(qt, "liveProps", []);
953
+ a(Dt, "liveProps", []);
745
954
  class de extends g {
746
955
  render() {
747
956
  const r = this.Host;
748
- return /* @__PURE__ */ p(r, { className: x(this.props) || null, children: /* @__PURE__ */ p("dl", { "aria-label": this.props.label, children: this.props.children ?? [] }) });
957
+ return /* @__PURE__ */ h(r, { className: E(this.props) || null, children: /* @__PURE__ */ h("dl", { "aria-label": this.props.label, children: this.props.children ?? [] }) });
749
958
  }
750
959
  }
751
- a(de, "liveProps", []), a(de, "hostName", "descriptionlist"), a(de, "dependencies", [qt]), a(de, "css", E`
960
+ a(de, "liveProps", []), a(de, "hostName", "descriptionlist"), a(de, "dependencies", [Dt]), a(de, "css", w`
752
961
  & {
753
962
  display: block;
754
963
  }
@@ -758,13 +967,13 @@ a(de, "liveProps", []), a(de, "hostName", "descriptionlist"), a(de, "dependencie
758
967
  margin: 0;
759
968
  }
760
969
  `);
761
- class H extends g {
970
+ class M extends g {
762
971
  render() {
763
- const r = Yt(this.props.width ?? 65), e = this.Host;
764
- return /* @__PURE__ */ p(e, { style: { width: `${r}%` }, "aria-hidden": "true" });
972
+ const r = or(this.props.width ?? 65), e = this.Host;
973
+ return /* @__PURE__ */ h(e, { style: { width: `${r}%` }, "aria-hidden": "true" });
765
974
  }
766
975
  }
767
- a(H, "liveProps", []), a(H, "hostName", "placeholder"), a(H, "css", E`
976
+ a(M, "liveProps", []), a(M, "hostName", "placeholder"), a(M, "css", w`
768
977
  & {
769
978
  display: block;
770
979
  width: 5em;
@@ -802,48 +1011,48 @@ a(H, "liveProps", []), a(H, "hostName", "placeholder"), a(H, "css", E`
802
1011
  }
803
1012
  }
804
1013
  `);
805
- function Yt(t) {
1014
+ function or(t) {
806
1015
  const r = Number(t);
807
1016
  if (!Number.isFinite(r)) throw new TypeError("Placeholder width must be numeric");
808
1017
  return Math.min(100, Math.max(10, r));
809
1018
  }
810
- function Nt(t, r, e) {
811
- Je(e);
1019
+ function Pt(t, r, e) {
1020
+ Ze(e);
812
1021
  for (const i of e) {
813
1022
  const o = r[i.key];
814
1023
  if (o == null) continue;
815
1024
  const s = i.options.flatMap((c) => {
816
1025
  const u = o[c.key];
817
- return u == null || u === y.Neutral ? [] : [{ option: c, mode: u }];
1026
+ return u == null || u === v.Neutral ? [] : [{ option: c, mode: u }];
818
1027
  });
819
- if (s.some(({ option: c, mode: u }) => u === y.Deny && c.matches(t)) || s.filter(({ mode: c }) => c === y.Require).some(({ option: c }) => !c.matches(t)))
1028
+ if (s.some(({ option: c, mode: u }) => u === v.Deny && c.matches(t)) || s.filter(({ mode: c }) => c === v.Require).some(({ option: c }) => !c.matches(t)))
820
1029
  return !1;
821
- const l = s.filter(({ mode: c }) => c === y.Prefer);
1030
+ const l = s.filter(({ mode: c }) => c === v.Prefer);
822
1031
  if (l.length > 0 && !l.some(({ option: c }) => c.matches(t)))
823
1032
  return !1;
824
1033
  }
825
1034
  return !0;
826
1035
  }
827
- function Jt(t, r, e) {
1036
+ function sr(t, r, e) {
828
1037
  if (!Array.isArray(t)) throw new TypeError("Filtered items must be an array");
829
- return t.filter((i) => Nt(i, r, e));
1038
+ return t.filter((i) => Pt(i, r, e));
830
1039
  }
831
- function Ci(t, r, e = null) {
832
- return Je(r), new Te(
1040
+ function Fi(t, r, e = null) {
1041
+ return Ze(r), new Te(
833
1042
  [t],
834
- ([i]) => (o) => Nt(o, i, r),
1043
+ ([i]) => (o) => Pt(o, i, r),
835
1044
  { owner: e, purpose: "filter predicate" }
836
1045
  );
837
1046
  }
838
- function zi(t, r, e, i = null) {
839
- return Je(e), new Te(
1047
+ function Di(t, r, e, i = null) {
1048
+ return Ze(e), new Te(
840
1049
  [t, r],
841
- ([o, s]) => Jt(o, s, e),
1050
+ ([o, s]) => sr(o, s, e),
842
1051
  { owner: i, purpose: "filtered items" }
843
1052
  );
844
1053
  }
845
- function $i(t) {
846
- Zt(t);
1054
+ function Pi(t) {
1055
+ nr(t);
847
1056
  const r = {};
848
1057
  for (const e of Object.keys(t).sort()) {
849
1058
  const i = {}, o = t[e];
@@ -853,16 +1062,16 @@ function $i(t) {
853
1062
  }
854
1063
  return { version: 1, dimensions: r };
855
1064
  }
856
- function Oi(t) {
1065
+ function Ki(t) {
857
1066
  if (!ee(t) || t.version !== 1 || !ee(t.dimensions))
858
1067
  throw new TypeError("Filter state must use version 1 with a dimensions object");
859
1068
  const r = {};
860
1069
  for (const [e, i] of Object.entries(t.dimensions)) {
861
- if (W(e, "Filter dimension"), !ee(i))
1070
+ if (B(e, "Filter dimension"), !ee(i))
862
1071
  throw new TypeError(`Filter dimension ${e} must be an object`);
863
1072
  const o = {};
864
1073
  for (const [s, n] of Object.entries(i)) {
865
- if (W(s, `Filter option in ${e}`), !Re(n))
1074
+ if (B(s, `Filter option in ${e}`), !Re(n))
866
1075
  throw new TypeError(
867
1076
  `Unknown filter mode for ${e}.${s}: ${String(n)}`
868
1077
  );
@@ -872,46 +1081,46 @@ function Oi(t) {
872
1081
  }
873
1082
  return r;
874
1083
  }
875
- function Zt(t) {
1084
+ function nr(t) {
876
1085
  if (!ee(t)) throw new TypeError("Filter state must be an object");
877
1086
  for (const [r, e] of Object.entries(t)) {
878
- if (W(r, "Filter dimension"), !ee(e))
1087
+ if (B(r, "Filter dimension"), !ee(e))
879
1088
  throw new TypeError(`Filter dimension ${r} must be an object`);
880
1089
  for (const [i, o] of Object.entries(e))
881
- if (W(i, `Filter option in ${r}`), !Re(o))
1090
+ if (B(i, `Filter option in ${r}`), !Re(o))
882
1091
  throw new TypeError(
883
1092
  `Unknown filter mode for ${r}.${i}: ${String(o)}`
884
1093
  );
885
1094
  }
886
1095
  }
887
- function Je(t) {
1096
+ function Ze(t) {
888
1097
  if (!Array.isArray(t)) throw new TypeError("Filter dimensions must be an array");
889
1098
  const r = /* @__PURE__ */ new Set();
890
1099
  for (const e of t) {
891
- if (W(e.key, "Filter dimension"), r.has(e.key))
1100
+ if (B(e.key, "Filter dimension"), r.has(e.key))
892
1101
  throw new Error(`Duplicate filter dimension: ${e.key}`);
893
1102
  if (r.add(e.key), !Array.isArray(e.options))
894
1103
  throw new TypeError(`Filter dimension ${e.key} options must be an array`);
895
1104
  const i = /* @__PURE__ */ new Set();
896
1105
  for (const o of e.options) {
897
- if (W(o.key, `Filter option in ${e.key}`), i.has(o.key))
1106
+ if (B(o.key, `Filter option in ${e.key}`), i.has(o.key))
898
1107
  throw new Error(`Duplicate filter option: ${e.key}.${o.key}`);
899
1108
  if (i.add(o.key), typeof o.matches != "function")
900
1109
  throw new TypeError(`Filter matcher ${e.key}.${o.key} must be a function`);
901
1110
  }
902
1111
  }
903
1112
  }
904
- function W(t, r) {
1113
+ function B(t, r) {
905
1114
  if (t.length === 0 || t === "__proto__" || t === "prototype" || t === "constructor")
906
1115
  throw new TypeError(`${r} key is not safe for persisted state`);
907
1116
  }
908
1117
  function ee(t) {
909
1118
  return t != null && typeof t == "object" && !Array.isArray(t);
910
1119
  }
911
- class Lt {
1120
+ class Kt {
912
1121
  constructor({
913
1122
  getItems: r,
914
- getKey: e = Xe,
1123
+ getKey: e = et,
915
1124
  selectedItemsEmitter: i,
916
1125
  owner: o = null
917
1126
  }) {
@@ -936,10 +1145,10 @@ class Lt {
936
1145
  throw new TypeError("Selection handler getItems must be a function");
937
1146
  if (typeof e != "function")
938
1147
  throw new TypeError("Selection handler getKey must be a function");
939
- this.getItems = r, this.getKey = e, this.ownedSelectedItemsEmitter = i == null ? new I([], { owner: o, purpose: "selected items" }) : null, this.selectedItemsEmitter = i ?? this.ownedSelectedItemsEmitter, this.selectedItems$ = this.selectedItemsEmitter, this.ownsSelectedItemsEmitter = this.ownedSelectedItemsEmitter != null;
1148
+ this.getItems = r, this.getKey = e, this.ownedSelectedItemsEmitter = i == null ? new S([], { owner: o, purpose: "selected items" }) : null, this.selectedItemsEmitter = i ?? this.ownedSelectedItemsEmitter, this.selectedItems$ = this.selectedItemsEmitter, this.ownsSelectedItemsEmitter = this.ownedSelectedItemsEmitter != null;
940
1149
  }
941
1150
  rowsUpdated(r) {
942
- this.destroyed || (this.releaseRows(), this.rows = Array.from(r ?? []), this.rows.forEach((e, i) => this.wireRow(e, i)), this.activeIndex = tr(this.activeIndex, this.rows.length), this.reconcileSelectedItems(), this.syncRows());
1151
+ this.destroyed || (this.releaseRows(), this.rows = Array.from(r ?? []), this.rows.forEach((e, i) => this.wireRow(e, i)), this.activeIndex = cr(this.activeIndex, this.rows.length), this.reconcileSelectedItems(), this.syncRows());
943
1152
  }
944
1153
  wireRow(r, e) {
945
1154
  const i = (l) => this.handleClick(e, l), o = (l) => this.handleKeyDown(e, l), s = (l) => this.handleMouseDown(e, l, r), n = (l) => this.handleMouseEnter(e, l);
@@ -1027,9 +1236,9 @@ class Lt {
1027
1236
  this.destroyed || (this.destroyed = !0, this.finishDrag(!1), this.clearClickSuppression(), this.releaseRows(), (r = this.ownedSelectedItemsEmitter) == null || r.dispose());
1028
1237
  }
1029
1238
  }
1030
- class Ze extends Lt {
1239
+ class Xe extends Kt {
1031
1240
  constructor(e) {
1032
- const i = e.selectedItemEmitter == null ? new I(null, {
1241
+ const i = e.selectedItemEmitter == null ? new S(null, {
1033
1242
  owner: e.owner,
1034
1243
  purpose: "selected item"
1035
1244
  }) : null, o = e.selectedItemEmitter ?? i;
@@ -1037,7 +1246,7 @@ class Ze extends Lt {
1037
1246
  getItems: e.getItems,
1038
1247
  ...e.getKey == null ? {} : { getKey: e.getKey },
1039
1248
  ...e.owner === void 0 ? {} : { owner: e.owner },
1040
- selectedItemsEmitter: new er(o)
1249
+ selectedItemsEmitter: new lr(o)
1041
1250
  });
1042
1251
  a(this, "selectedItemEmitter");
1043
1252
  a(this, "selectedItem$");
@@ -1056,17 +1265,17 @@ class Ze extends Lt {
1056
1265
  super.destroy(), (e = this.ownedSelectedItemEmitter) == null || e.dispose();
1057
1266
  }
1058
1267
  }
1059
- class Xt extends Lt {
1268
+ class ar extends Kt {
1060
1269
  selectIndex(r, e) {
1061
1270
  const i = this.getItems(), o = i[r];
1062
1271
  if (o !== void 0) {
1063
1272
  if (e.shiftKey && this.anchorIndex != null) {
1064
- const s = Math.min(this.anchorIndex, r), n = Math.max(this.anchorIndex, r), l = i.slice(s, n + 1), c = $e(e) ? yt(this.getSelectedItems(), l, this.getKey) : [...l];
1273
+ const s = Math.min(this.anchorIndex, r), n = Math.max(this.anchorIndex, r), l = i.slice(s, n + 1), c = Oe(e) ? Et(this.getSelectedItems(), l, this.getKey) : [...l];
1065
1274
  this.setSelectedItems(c, "range selection changed");
1066
1275
  return;
1067
1276
  }
1068
- if ($e(e) || "key" in e && e.key === " ") {
1069
- const s = this.getSelectedItems(), n = this.getKey(o, r), c = s.some((u, h) => Object.is(this.getKey(u, h), n)) ? s.filter((u, h) => !Object.is(this.getKey(u, h), n)) : [...s, o];
1277
+ if (Oe(e) || "key" in e && e.key === " ") {
1278
+ const s = this.getSelectedItems(), n = this.getKey(o, r), c = s.some((u, p) => Object.is(this.getKey(u, p), n)) ? s.filter((u, p) => !Object.is(this.getKey(u, p), n)) : [...s, o];
1070
1279
  this.anchorIndex = r, this.setSelectedItems(c, "multi selection toggled");
1071
1280
  return;
1072
1281
  }
@@ -1080,14 +1289,14 @@ class Xt extends Lt {
1080
1289
  return !0;
1081
1290
  }
1082
1291
  selectDragRange(r, e, i) {
1083
- const o = this.getItems(), s = Math.min(r, e), n = Math.max(r, e), l = o.slice(s, n + 1), c = $e(i) ? yt(this.getSelectedItems(), l, this.getKey) : [...l];
1292
+ const o = this.getItems(), s = Math.min(r, e), n = Math.max(r, e), l = o.slice(s, n + 1), c = Oe(i) ? Et(this.getSelectedItems(), l, this.getKey) : [...l];
1084
1293
  this.anchorIndex = r, this.setSelectedItems(c, "drag selection changed");
1085
1294
  }
1086
1295
  }
1087
1296
  function xe(t) {
1088
- return t.multiSelect ? new Xt(t) : new Ze(t);
1297
+ return t.multiSelect ? new ar(t) : new Xe(t);
1089
1298
  }
1090
- class er {
1299
+ class lr {
1091
1300
  constructor(r) {
1092
1301
  this.source = r;
1093
1302
  }
@@ -1111,7 +1320,7 @@ class er {
1111
1320
  }), e);
1112
1321
  }
1113
1322
  }
1114
- function Xe(t, r) {
1323
+ function et(t, r) {
1115
1324
  if (t != null && typeof t == "object") {
1116
1325
  const e = Reflect.get(t, "id");
1117
1326
  if (e != null) return e;
@@ -1121,13 +1330,13 @@ function Xe(t, r) {
1121
1330
  `Selection item at index ${r} needs an id or an explicit itemKey/rowKey`
1122
1331
  );
1123
1332
  }
1124
- function $e(t) {
1333
+ function Oe(t) {
1125
1334
  return !!(t.ctrlKey || t.metaKey);
1126
1335
  }
1127
- function tr(t, r) {
1336
+ function cr(t, r) {
1128
1337
  return r <= 0 ? 0 : Math.min(Math.max(t, 0), r - 1);
1129
1338
  }
1130
- function yt(t, r, e) {
1339
+ function Et(t, r, e) {
1131
1340
  const i = [...t], o = new Set(t.map((s, n) => e(s, n)));
1132
1341
  for (const s of r) {
1133
1342
  const n = e(s, i.length);
@@ -1147,10 +1356,10 @@ class ue extends g {
1147
1356
  a(this, "getItemKey");
1148
1357
  a(this, "selectionHandler");
1149
1358
  a(this, "ownedItemsEmitter");
1150
- ir(e.items) ? (this.itemsEmitter = e.items, this.ownedItemsEmitter = null) : (this.ownedItemsEmitter = new I(e.items ?? [], {
1359
+ ur(e.items) ? (this.itemsEmitter = e.items, this.ownedItemsEmitter = null) : (this.ownedItemsEmitter = new S(e.items ?? [], {
1151
1360
  owner: this,
1152
1361
  purpose: "list items"
1153
- }), this.itemsEmitter = this.ownedItemsEmitter), this.items$ = this.itemsEmitter, this.getItemKey = rr(e.itemKey), this.selectionHandler = e.multiSelect === !0 ? xe({
1362
+ }), this.itemsEmitter = this.ownedItemsEmitter), this.items$ = this.itemsEmitter, this.getItemKey = dr(e.itemKey), this.selectionHandler = e.multiSelect === !0 ? xe({
1154
1363
  owner: this,
1155
1364
  multiSelect: !0,
1156
1365
  ...e.selectedItemsEmitter == null ? {} : { selectedItemsEmitter: e.selectedItemsEmitter },
@@ -1161,7 +1370,7 @@ class ue extends g {
1161
1370
  ...e.selectedItemEmitter == null ? {} : { selectedItemEmitter: e.selectedItemEmitter },
1162
1371
  getItems: () => this.itemsEmitter.get(),
1163
1372
  getKey: this.getItemKey
1164
- }), this.selectedItemsEmitter = this.selectionHandler.selectedItemsEmitter, this.selectedItems$ = this.selectedItemsEmitter, this.selectedItemEmitter = this.selectionHandler instanceof Ze ? this.selectionHandler.selectedItemEmitter : null, this.selectedItem$ = this.selectedItemEmitter;
1373
+ }), this.selectedItemsEmitter = this.selectionHandler.selectedItemsEmitter, this.selectedItems$ = this.selectedItemsEmitter, this.selectedItemEmitter = this.selectionHandler instanceof Xe ? this.selectionHandler.selectedItemEmitter : null, this.selectedItem$ = this.selectedItemEmitter;
1165
1374
  }
1166
1375
  initialize() {
1167
1376
  this.watch(this.itemsEmitter, this.selectedItemsEmitter);
@@ -1169,19 +1378,19 @@ class ue extends g {
1169
1378
  render() {
1170
1379
  const e = this.itemsEmitter.get();
1171
1380
  if (!Array.isArray(e)) throw new TypeError("ListView items must be an array");
1172
- const i = this.itemsEmitter.getFetchState(), o = this.itemsEmitter.getError(), s = i === S.Initial || i === S.Loading, n = new Set(this.selectedItemsEmitter.get().map((c, u) => this.getItemKey(c, u))), l = this.Host;
1173
- return /* @__PURE__ */ v(
1381
+ const i = this.itemsEmitter.getFetchState(), o = this.itemsEmitter.getError(), s = i === k.Initial || i === k.Loading, n = new Set(this.selectedItemsEmitter.get().map((c, u) => this.getItemKey(c, u))), l = this.Host;
1382
+ return /* @__PURE__ */ y(
1174
1383
  l,
1175
1384
  {
1176
- className: x(this.props) || null,
1385
+ className: E(this.props) || null,
1177
1386
  children: [
1178
- i === S.Error ? /* @__PURE__ */ p("p", { role: "alert", children: nr(o, "Unable to load items") }) : null,
1179
- s && e.length === 0 ? /* @__PURE__ */ v(Ie, { children: [
1180
- /* @__PURE__ */ p("p", { role: "status", children: "Loading items…" }),
1181
- /* @__PURE__ */ p("ul", { "aria-hidden": "true", children: Array.from({ length: this.props.placeholderCount ?? 5 }, (c, u) => /* @__PURE__ */ p("li", { children: /* @__PURE__ */ p(H, { width: 45 + u * 7 }) }, `placeholder-${u}`)) })
1387
+ i === k.Error ? /* @__PURE__ */ h("p", { role: "alert", children: fr(o, "Unable to load items") }) : null,
1388
+ s && e.length === 0 ? /* @__PURE__ */ y(Ie, { children: [
1389
+ /* @__PURE__ */ h("p", { role: "status", children: "Loading items…" }),
1390
+ /* @__PURE__ */ h("ul", { "aria-hidden": "true", children: Array.from({ length: this.props.placeholderCount ?? 5 }, (c, u) => /* @__PURE__ */ h("li", { children: /* @__PURE__ */ h(M, { width: 45 + u * 7 }) }, `placeholder-${u}`)) })
1182
1391
  ] }) : null,
1183
- i === S.Ready && e.length === 0 ? /* @__PURE__ */ p("p", { role: "status", children: "No items" }) : null,
1184
- e.length > 0 ? /* @__PURE__ */ p(
1392
+ i === k.Ready && e.length === 0 ? /* @__PURE__ */ h("p", { role: "status", children: "No items" }) : null,
1393
+ e.length > 0 ? /* @__PURE__ */ h(
1185
1394
  "ul",
1186
1395
  {
1187
1396
  role: "listbox",
@@ -1189,8 +1398,8 @@ class ue extends g {
1189
1398
  "aria-busy": s ? "true" : null,
1190
1399
  "aria-multiselectable": this.props.multiSelect ? "true" : null,
1191
1400
  children: e.map((c, u) => {
1192
- const h = this.getItemKey(c, u), b = n.has(h), f = this.props.renderItem ? this.props.renderItem(c, u) : or(c);
1193
- return /* @__PURE__ */ p(
1401
+ const p = this.getItemKey(c, u), b = n.has(p), f = this.props.renderItem ? this.props.renderItem(c, u) : hr(c);
1402
+ return /* @__PURE__ */ h(
1194
1403
  "li",
1195
1404
  {
1196
1405
  role: "option",
@@ -1199,7 +1408,7 @@ class ue extends g {
1199
1408
  tabIndex: u === 0 ? 0 : -1,
1200
1409
  children: f
1201
1410
  },
1202
- String(h)
1411
+ String(p)
1203
1412
  );
1204
1413
  })
1205
1414
  }
@@ -1230,7 +1439,7 @@ class ue extends g {
1230
1439
  this.selectionHandler.destroy(), (e = this.ownedItemsEmitter) == null || e.dispose();
1231
1440
  }
1232
1441
  }
1233
- a(ue, "liveProps", []), a(ue, "dependencies", [H]), a(ue, "hostName", "listview"), a(ue, "css", E`
1442
+ a(ue, "liveProps", []), a(ue, "dependencies", [M]), a(ue, "hostName", "listview"), a(ue, "css", w`
1234
1443
  & {
1235
1444
  display: flex;
1236
1445
  flex-direction: column;
@@ -1284,8 +1493,8 @@ a(ue, "liveProps", []), a(ue, "dependencies", [H]), a(ue, "hostName", "listview"
1284
1493
  padding: var(--ui-padding);
1285
1494
  }
1286
1495
  `);
1287
- function rr(t) {
1288
- if (t == null) return Xe;
1496
+ function dr(t) {
1497
+ if (t == null) return et;
1289
1498
  if (typeof t == "function") return t;
1290
1499
  if (typeof t == "string" && t.length > 0)
1291
1500
  return (r, e) => {
@@ -1298,28 +1507,29 @@ function rr(t) {
1298
1507
  };
1299
1508
  throw new TypeError("ListView itemKey must be a function or property name");
1300
1509
  }
1301
- function ir(t) {
1510
+ function ur(t) {
1302
1511
  return t != null && (typeof t == "object" || typeof t == "function") && typeof Reflect.get(t, "get") == "function" && typeof Reflect.get(t, "subscribe") == "function";
1303
1512
  }
1304
- function or(t) {
1513
+ function hr(t) {
1305
1514
  if (t != null && (typeof t == "object" || typeof t == "function")) {
1306
1515
  const r = Reflect.get(t, "label");
1307
- if (sr(r)) return r;
1516
+ if (pr(r)) return r;
1308
1517
  }
1309
1518
  return String(t);
1310
1519
  }
1311
- function sr(t) {
1520
+ function pr(t) {
1312
1521
  return t == null || typeof t == "string" || typeof t == "number";
1313
1522
  }
1314
- function nr(t, r) {
1523
+ function fr(t, r) {
1315
1524
  return t instanceof Error ? t.message : t == null ? r : String(t);
1316
1525
  }
1317
- class et extends g {
1526
+ class tt extends g {
1318
1527
  }
1319
- a(et, "css", E`
1528
+ a(tt, "css", w`
1320
1529
  & {
1321
1530
  display: inline-flex;
1322
1531
  line-height: 1;
1532
+ height: 1.4em;
1323
1533
  }
1324
1534
 
1325
1535
  & > label {
@@ -1397,8 +1607,8 @@ a(et, "css", E`
1397
1607
  filter: saturate(0.6);
1398
1608
  }
1399
1609
  `);
1400
- const ar = ["disabled", "required", "error"];
1401
- class j extends et {
1610
+ const mr = ["disabled", "required", "error"];
1611
+ class A extends tt {
1402
1612
  constructor(e = {}) {
1403
1613
  super(e);
1404
1614
  a(this, "symbols");
@@ -1406,11 +1616,11 @@ class j extends et {
1406
1616
  a(this, "semanticStateEmitter");
1407
1617
  a(this, "inputId");
1408
1618
  a(this, "errorId");
1409
- this.inputId = R("checkbox", e.id), this.errorId = `${this.inputId}-error`;
1619
+ this.inputId = I("checkbox", e.id), this.errorId = `${this.inputId}-error`;
1410
1620
  const i = this.constructor;
1411
- this.symbols = e.symbols ?? i.symbols, lr(this.symbols);
1621
+ this.symbols = e.symbols ?? i.symbols, br(this.symbols);
1412
1622
  const o = e.initialSemanticState ?? i.defaultSemanticState ?? this.symbols[0][1], s = { ...e };
1413
- s.defaultValue == null && e.initialSemanticState != null && (s.defaultValue = e.initialSemanticState), this.valueEmitter = F(
1623
+ s.defaultValue == null && e.initialSemanticState != null && (s.defaultValue = e.initialSemanticState), this.valueEmitter = L(
1414
1624
  this,
1415
1625
  s,
1416
1626
  o,
@@ -1423,7 +1633,7 @@ class j extends et {
1423
1633
  cycleState(e = 1, i = null) {
1424
1634
  if (this.props.disabled) return;
1425
1635
  const o = this.symbols.findIndex(([, c]) => Object.is(c, this.valueEmitter.get())), n = ((o < 0 ? 0 : o) + e + this.symbols.length) % this.symbols.length, l = this.symbols[n][1];
1426
- this.valueEmitter.set(l, "checkbox state changed"), $(this.props.onChange, l, i);
1636
+ this.valueEmitter.set(l, "checkbox state changed"), z(this.props.onChange, l, i);
1427
1637
  }
1428
1638
  render() {
1429
1639
  const {
@@ -1431,15 +1641,15 @@ class j extends et {
1431
1641
  disabled: i = !1,
1432
1642
  required: o = !1,
1433
1643
  error: s = null
1434
- } = this.props, n = this.valueEmitter.get(), l = this.symbols.findIndex(([, m]) => Object.is(m, n)), [c] = this.symbols[l] ?? ["?", n], u = c === "☐" ? null : c, h = Wt(n), b = wt(this.symbols, n), f = this.Host;
1435
- return /* @__PURE__ */ v(
1644
+ } = this.props, n = this.valueEmitter.get(), l = this.symbols.findIndex(([, m]) => Object.is(m, n)), [c] = this.symbols[l] ?? ["?", n], u = c === "☐" ? null : c, p = Xt(n), b = xt(this.symbols, n), f = this.Host;
1645
+ return /* @__PURE__ */ y(
1436
1646
  f,
1437
1647
  {
1438
- className: x(this.props) || null,
1439
- "data-state": h,
1648
+ className: E(this.props) || null,
1649
+ "data-state": p,
1440
1650
  children: [
1441
- /* @__PURE__ */ v("label", { children: [
1442
- /* @__PURE__ */ p(
1651
+ /* @__PURE__ */ y("label", { children: [
1652
+ /* @__PURE__ */ h(
1443
1653
  "input",
1444
1654
  {
1445
1655
  id: this.inputId,
@@ -1449,11 +1659,11 @@ class j extends et {
1449
1659
  required: o,
1450
1660
  name: this.props.name,
1451
1661
  value: String(n),
1452
- "aria-label": `${e}: ${h}`,
1662
+ "aria-label": `${e}: ${p}`,
1453
1663
  "aria-invalid": s == null ? null : "true",
1454
1664
  "aria-describedby": s == null ? null : this.errorId,
1455
1665
  onChange: (m) => {
1456
- this.cycleState(1, m), m.currentTarget.checked = wt(
1666
+ this.cycleState(1, m), m.currentTarget.checked = xt(
1457
1667
  this.symbols,
1458
1668
  this.valueEmitter.get()
1459
1669
  );
@@ -1463,19 +1673,19 @@ class j extends et {
1463
1673
  }
1464
1674
  }
1465
1675
  ),
1466
- w("fray-checkshell", { "aria-hidden": "true" }, u),
1676
+ /* @__PURE__ */ h("fray-checkshell", { "aria-hidden": "true", children: u }),
1467
1677
  e
1468
1678
  ] }),
1469
- s == null ? null : /* @__PURE__ */ p("p", { id: this.errorId, role: "alert", children: String(s) })
1679
+ s == null ? null : /* @__PURE__ */ h("p", { id: this.errorId, role: "alert", children: String(s) })
1470
1680
  ]
1471
1681
  }
1472
1682
  );
1473
1683
  }
1474
1684
  }
1475
- a(j, "liveProps", ar), a(j, "symbols", [
1476
- ["☐", y.Neutral],
1477
- ["✓", y.Prefer]
1478
- ]), a(j, "defaultSemanticState", y.Neutral), a(j, "hostName", "check-box"), a(j, "css", E`
1685
+ a(A, "liveProps", mr), a(A, "symbols", [
1686
+ ["☐", v.Neutral],
1687
+ ["✓", v.Prefer]
1688
+ ]), a(A, "defaultSemanticState", v.Neutral), a(A, "hostName", "check-box"), a(A, "css", w`
1479
1689
  & > label > input[value="require"] + fray-checkshell {
1480
1690
  color: var(--palette-contrast-light);
1481
1691
  background: var(--palette-green);
@@ -1488,64 +1698,64 @@ a(j, "liveProps", ar), a(j, "symbols", [
1488
1698
  box-shadow: var(--checkbox-box-shadow-checked);
1489
1699
  }
1490
1700
  `);
1491
- function lr(t) {
1701
+ function br(t) {
1492
1702
  if (!Array.isArray(t) || t.length === 0)
1493
1703
  throw new TypeError("Checkbox symbols must be a non-empty tuple array");
1494
1704
  for (const r of t)
1495
1705
  if (!Array.isArray(r) || r.length < 2)
1496
1706
  throw new TypeError("Checkbox symbols must be [symbol, state] tuples");
1497
1707
  }
1498
- function wt(t, r) {
1708
+ function xt(t, r) {
1499
1709
  const e = t.findIndex(([, i]) => Object.is(i, r));
1500
- return r === y.Prefer || r === y.Require || t.length === 2 && e === 1;
1710
+ return r === v.Prefer || r === v.Require || t.length === 2 && e === 1;
1501
1711
  }
1502
- class U extends g {
1712
+ class V extends g {
1503
1713
  constructor(e = {}) {
1504
1714
  super(e);
1505
1715
  a(this, "optionsEmitter");
1506
1716
  a(this, "optionStateEmitters", /* @__PURE__ */ new Map());
1507
1717
  a(this, "staleOptionValues", /* @__PURE__ */ new Set());
1508
- this.optionsEmitter = pr(e.options) ? e.options : null;
1718
+ this.optionsEmitter = Er(e.options) ? e.options : null;
1509
1719
  }
1510
1720
  initialize() {
1511
1721
  this.optionsEmitter && this.watch(this.optionsEmitter);
1512
1722
  }
1513
1723
  render() {
1514
- var f, m, C;
1724
+ var f, m, R;
1515
1725
  const e = ((f = this.optionsEmitter) == null ? void 0 : f.get()) ?? (Array.isArray(this.props.options) ? this.props.options : []);
1516
1726
  if (!Array.isArray(e))
1517
1727
  throw new TypeError("FilterPanel options must be an array or emitter of arrays");
1518
- const i = ((m = this.optionsEmitter) == null ? void 0 : m.getFetchState()) ?? S.Ready, o = (C = this.optionsEmitter) == null ? void 0 : C.getError(), s = vt(this.props.filters), n = this.props.filterModes ?? j.symbols, l = this.props.defaultSemanticState ?? y.Neutral, c = new Set(e.map(_e));
1728
+ const i = ((m = this.optionsEmitter) == null ? void 0 : m.getFetchState()) ?? k.Ready, o = (R = this.optionsEmitter) == null ? void 0 : R.getError(), s = kt(this.props.filters), n = this.props.filterModes ?? A.symbols, l = this.props.defaultSemanticState ?? v.Neutral, c = new Set(e.map(Qe));
1519
1729
  this.staleOptionValues = new Set(
1520
1730
  [...this.optionStateEmitters.keys()].filter((T) => !c.has(T))
1521
1731
  );
1522
- const u = this.Host, h = i === S.Initial || i === S.Loading, b = x(this.props) || null;
1523
- return i === S.Error && e.length === 0 ? /* @__PURE__ */ p(u, { className: b, children: /* @__PURE__ */ p("p", { role: "alert", children: Et(o, "Unable to load filter options") }) }) : h && e.length === 0 ? /* @__PURE__ */ p(u, { className: b, children: /* @__PURE__ */ p("p", { role: "status", children: "Loading filter options…" }) }) : /* @__PURE__ */ v(
1732
+ const u = this.Host, p = i === k.Initial || i === k.Loading, b = E(this.props) || null;
1733
+ return i === k.Error && e.length === 0 ? /* @__PURE__ */ h(u, { className: b, children: /* @__PURE__ */ h("p", { role: "alert", children: St(o, "Unable to load filter options") }) }) : p && e.length === 0 ? /* @__PURE__ */ h(u, { className: b, children: /* @__PURE__ */ h("p", { role: "status", children: "Loading filter options…" }) }) : /* @__PURE__ */ y(
1524
1734
  u,
1525
1735
  {
1526
1736
  className: b,
1527
1737
  role: "group",
1528
1738
  "aria-label": this.props.label ?? "Filter options",
1529
- "aria-busy": h ? "true" : null,
1739
+ "aria-busy": p ? "true" : null,
1530
1740
  children: [
1531
- i === S.Error ? /* @__PURE__ */ p("p", { role: "alert", children: Et(o, "Unable to load filter options") }) : null,
1532
- h ? /* @__PURE__ */ p("p", { role: "status", children: "Loading filter options…" }) : null,
1533
- e.length === 0 ? /* @__PURE__ */ p("p", { children: "No filter options" }) : e.map((T) => {
1534
- const k = _e(T), O = dr(T), P = s.get(k) ?? l, K = this.optionEmitter(k, P);
1535
- return /* @__PURE__ */ p(
1536
- cr,
1741
+ i === k.Error ? /* @__PURE__ */ h("p", { role: "alert", children: St(o, "Unable to load filter options") }) : null,
1742
+ p ? /* @__PURE__ */ h("p", { role: "status", children: "Loading filter options…" }) : null,
1743
+ e.length === 0 ? /* @__PURE__ */ h("p", { children: "No filter options" }) : e.map((T) => {
1744
+ const x = Qe(T), $ = yr(T), D = s.get(x) ?? l, P = this.optionEmitter(x, D);
1745
+ return /* @__PURE__ */ h(
1746
+ gr,
1537
1747
  {
1538
- label: O,
1539
- valueEmitter: K,
1748
+ label: $,
1749
+ valueEmitter: P,
1540
1750
  symbols: n,
1541
- onChange: (M, z) => {
1542
- var Y, J;
1543
- z == null || z.stopPropagation();
1544
- const N = vt(this.props.filters);
1545
- M === y.Neutral ? N.delete(k) : N.set(k, M), (J = (Y = this.props).onChange) == null || J.call(Y, N, z);
1751
+ onChange: (K, C) => {
1752
+ var G, Y;
1753
+ C == null || C.stopPropagation();
1754
+ const q = kt(this.props.filters);
1755
+ K === v.Neutral ? q.delete(x) : q.set(x, K), (Y = (G = this.props).onChange) == null || Y.call(G, q, C);
1546
1756
  }
1547
1757
  },
1548
- ur(k)
1758
+ wr(x)
1549
1759
  );
1550
1760
  })
1551
1761
  ]
@@ -1566,11 +1776,11 @@ class U extends g {
1566
1776
  const o = this.optionStateEmitters.get(e);
1567
1777
  if (o != null)
1568
1778
  return o.get() !== i && o.set(i, "filter option synchronized"), o;
1569
- const s = new I(i, { owner: this, purpose: `filter option ${String(e)}` });
1779
+ const s = new S(i, { owner: this, purpose: `filter option ${String(e)}` });
1570
1780
  return this.optionStateEmitters.set(e, s), s;
1571
1781
  }
1572
1782
  }
1573
- a(U, "liveProps", []), a(U, "dependencies", [j]), a(U, "hostName", "filter-panel"), a(U, "css", E`
1783
+ a(V, "liveProps", []), a(V, "dependencies", [A]), a(V, "hostName", "filter-panel"), a(V, "css", w`
1574
1784
  & {
1575
1785
  position: absolute;
1576
1786
  background: white;
@@ -1590,14 +1800,14 @@ a(U, "liveProps", []), a(U, "dependencies", [j]), a(U, "hostName", "filter-panel
1590
1800
  margin: 0;
1591
1801
  }
1592
1802
  `);
1593
- const cr = j;
1594
- function vt(t) {
1803
+ const gr = A;
1804
+ function kt(t) {
1595
1805
  if (t == null) return /* @__PURE__ */ new Map();
1596
1806
  if (t instanceof Map) return new Map(t);
1597
1807
  if (Array.isArray(t)) return new Map(t);
1598
1808
  throw new TypeError("FilterPanel filters must be a Map or tuple array");
1599
1809
  }
1600
- function _e(t) {
1810
+ function Qe(t) {
1601
1811
  if (typeof t == "string" || typeof t == "number") return t;
1602
1812
  if (t != null && typeof t == "object") {
1603
1813
  const r = Reflect.get(t, "value");
@@ -1605,23 +1815,23 @@ function _e(t) {
1605
1815
  }
1606
1816
  throw new TypeError("Filter options must be strings, numbers, or value/label objects");
1607
1817
  }
1608
- function dr(t) {
1818
+ function yr(t) {
1609
1819
  if (t != null && typeof t == "object") {
1610
1820
  const r = Reflect.get(t, "label");
1611
- if (r != null) return hr(r) ? r : String(r);
1821
+ if (r != null) return vr(r) ? r : String(r);
1612
1822
  }
1613
- return String(_e(t));
1823
+ return String(Qe(t));
1614
1824
  }
1615
- function ur(t) {
1825
+ function wr(t) {
1616
1826
  return `${typeof t}:${String(t)}`;
1617
1827
  }
1618
- function hr(t) {
1828
+ function vr(t) {
1619
1829
  return typeof t == "string" || typeof t == "number";
1620
1830
  }
1621
- function pr(t) {
1831
+ function Er(t) {
1622
1832
  return t != null && (typeof t == "object" || typeof t == "function") && typeof Reflect.get(t, "get") == "function" && typeof Reflect.get(t, "subscribe") == "function";
1623
1833
  }
1624
- function Et(t, r) {
1834
+ function St(t, r) {
1625
1835
  return t instanceof Error ? t.message : t == null ? r : String(t);
1626
1836
  }
1627
1837
  class te extends g {
@@ -1651,11 +1861,11 @@ class te extends g {
1651
1861
  }
1652
1862
  render() {
1653
1863
  const e = this.props.sortEmitter.get(), i = (e == null ? void 0 : e.field) === this.props.field ? e.direction : null, o = new Map(
1654
- (this.props.filtersEmitter.get()[this.props.field] ?? []).filter(fr)
1864
+ (this.props.filtersEmitter.get()[this.props.field] ?? []).filter(xr)
1655
1865
  ), s = this.props.label ?? String(this.props.field), n = `Filter ${String(s)}`;
1656
1866
  let l = null;
1657
- return this.filterVisible && this.props.filterOptions != null && (l = /* @__PURE__ */ p(
1658
- U,
1867
+ return this.filterVisible && this.props.filterOptions != null && (l = /* @__PURE__ */ h(
1868
+ V,
1659
1869
  {
1660
1870
  label: n,
1661
1871
  options: this.props.filterOptions,
@@ -1665,14 +1875,14 @@ class te extends g {
1665
1875
  ...this.props.defaultSemanticState == null ? {} : { defaultSemanticState: this.props.defaultSemanticState }
1666
1876
  },
1667
1877
  "filter-panel"
1668
- )), /* @__PURE__ */ v(
1878
+ )), /* @__PURE__ */ y(
1669
1879
  "th",
1670
1880
  {
1671
1881
  scope: "col",
1672
1882
  "aria-sort": i === "asc" ? "ascending" : i === "desc" ? "descending" : "none",
1673
1883
  style: { zIndex: this.filterVisible ? 1200 : null },
1674
1884
  children: [
1675
- this.props.sortable ? /* @__PURE__ */ v(
1885
+ this.props.sortable ? /* @__PURE__ */ y(
1676
1886
  "button",
1677
1887
  {
1678
1888
  type: "button",
@@ -1681,11 +1891,11 @@ class te extends g {
1681
1891
  onClick: () => this.toggleSort(),
1682
1892
  children: [
1683
1893
  s,
1684
- /* @__PURE__ */ p("span", { class: "sortindicator", "aria-hidden": "true", children: i === "asc" ? "▲" : i === "desc" ? "▼" : "" })
1894
+ /* @__PURE__ */ h("span", { class: "sortindicator", "aria-hidden": "true", children: i === "asc" ? "▲" : i === "desc" ? "▼" : "" })
1685
1895
  ]
1686
1896
  }
1687
- ) : /* @__PURE__ */ p("span", { children: s }),
1688
- this.props.filterOptions == null ? null : /* @__PURE__ */ p(
1897
+ ) : /* @__PURE__ */ h("span", { children: s }),
1898
+ this.props.filterOptions == null ? null : /* @__PURE__ */ h(
1689
1899
  "button",
1690
1900
  {
1691
1901
  type: "button",
@@ -1702,7 +1912,7 @@ class te extends g {
1702
1912
  );
1703
1913
  }
1704
1914
  }
1705
- a(te, "liveProps", []), a(te, "dependencies", [U]), a(te, "css", E`
1915
+ a(te, "liveProps", []), a(te, "dependencies", [V]), a(te, "css", w`
1706
1916
  fray-datatable > table > thead > tr > th[aria-sort] {
1707
1917
  position: relative;
1708
1918
  padding-right: 24px;
@@ -1758,12 +1968,12 @@ a(te, "liveProps", []), a(te, "dependencies", [U]), a(te, "css", E`
1758
1968
  opacity: 1;
1759
1969
  }
1760
1970
  `);
1761
- function fr(t) {
1971
+ function xr(t) {
1762
1972
  return typeof t[0] == "string" || typeof t[0] == "number";
1763
1973
  }
1764
1974
  class re extends g {
1765
1975
  render() {
1766
- return /* @__PURE__ */ p("thead", { children: /* @__PURE__ */ p("tr", { children: this.props.columns.map((r) => /* @__PURE__ */ p(
1976
+ return /* @__PURE__ */ h("thead", { children: /* @__PURE__ */ h("tr", { children: this.props.columns.map((r) => /* @__PURE__ */ h(
1767
1977
  te,
1768
1978
  {
1769
1979
  field: r.field,
@@ -1780,7 +1990,7 @@ class re extends g {
1780
1990
  )) }) });
1781
1991
  }
1782
1992
  }
1783
- a(re, "liveProps", []), a(re, "dependencies", [te]), a(re, "css", E`
1993
+ a(re, "liveProps", []), a(re, "dependencies", [te]), a(re, "css", w`
1784
1994
  fray-datatable > table > thead {
1785
1995
  color: var(--table-header-color);
1786
1996
  background: var(--ui-gradient);
@@ -1795,118 +2005,118 @@ a(re, "liveProps", []), a(re, "dependencies", [te]), a(re, "css", E`
1795
2005
  border-right: none;
1796
2006
  }
1797
2007
  `);
1798
- const mr = {
1799
- [y.Neutral]: "☐",
1800
- [y.Prefer]: "",
1801
- [y.Require]: "_",
1802
- [y.Deny]: "!"
2008
+ const kr = {
2009
+ [v.Neutral]: "☐",
2010
+ [v.Prefer]: "",
2011
+ [v.Require]: "_",
2012
+ [v.Deny]: "!"
1803
2013
  };
1804
- function br(t, { sort: r = null, filters: e = {} } = {}) {
1805
- Er(t), r != null && (Ft(r), t.searchParams.set("sort", `${r.field}:${r.direction}`));
2014
+ function Sr(t, { sort: r = null, filters: e = {} } = {}) {
2015
+ zr(t), r != null && (Mt(r), t.searchParams.set("sort", `${r.field}:${r.direction}`));
1806
2016
  for (const [i, o] of Object.entries(e))
1807
2017
  for (const [s, n] of o) {
1808
2018
  if (!Re(n))
1809
2019
  throw new TypeError(`Unknown filter mode for ${i}: ${String(n)}`);
1810
2020
  t.searchParams.append(
1811
2021
  "filter",
1812
- `${i}:${mr[n]}:${JSON.stringify(s)}`
2022
+ `${i}:${kr[n]}:${JSON.stringify(s)}`
1813
2023
  );
1814
2024
  }
1815
2025
  return t;
1816
2026
  }
1817
- function gr(t, r, e) {
2027
+ function Ir(t, r, e) {
1818
2028
  if (!Array.isArray(t)) throw new TypeError("Local table data must be an array");
1819
- const i = t.filter((s) => yr(s, e));
2029
+ const i = t.filter((s) => Tr(s, e));
1820
2030
  if (r == null) return i;
1821
- Ft(r);
2031
+ Mt(r);
1822
2032
  const o = r.direction === "asc" ? 1 : -1;
1823
- return [...i].sort((s, n) => vr(Qe(s, r.field), Qe(n, r.field)) * o);
2033
+ return [...i].sort((s, n) => Cr(Be(s, r.field), Be(n, r.field)) * o);
1824
2034
  }
1825
- function yr(t, r) {
2035
+ function Tr(t, r) {
1826
2036
  for (const [e, i] of Object.entries(r)) {
1827
- const o = Qe(t, e);
1828
- if (i.filter(([, c]) => c === y.Deny).some(([c]) => Object.is(c, o))) return !1;
1829
- const n = i.filter(([, c]) => c === y.Require);
2037
+ const o = Be(t, e);
2038
+ if (i.filter(([, c]) => c === v.Deny).some(([c]) => Object.is(c, o))) return !1;
2039
+ const n = i.filter(([, c]) => c === v.Require);
1830
2040
  if (n.length > 0 && !n.some(([c]) => Object.is(c, o))) return !1;
1831
- const l = i.filter(([, c]) => c === y.Prefer);
2041
+ const l = i.filter(([, c]) => c === v.Prefer);
1832
2042
  if (l.length > 0 && !l.some(([c]) => Object.is(c, o))) return !1;
1833
2043
  }
1834
2044
  return !0;
1835
2045
  }
1836
- function Ft(t) {
1837
- if (t == null || typeof t != "object" || typeof Reflect.get(t, "field") != "string" || !wr(Reflect.get(t, "direction")))
2046
+ function Mt(t) {
2047
+ if (t == null || typeof t != "object" || typeof Reflect.get(t, "field") != "string" || !Rr(Reflect.get(t, "direction")))
1838
2048
  throw new TypeError("Table sort must contain a field and asc/desc direction");
1839
2049
  }
1840
- function wr(t) {
2050
+ function Rr(t) {
1841
2051
  return t === "asc" || t === "desc";
1842
2052
  }
1843
- function vr(t, r) {
2053
+ function Cr(t, r) {
1844
2054
  return Object.is(t, r) ? 0 : t == null ? -1 : r == null ? 1 : typeof t == "number" && typeof r == "number" ? t - r : String(t).localeCompare(String(r));
1845
2055
  }
1846
- function Qe(t, r) {
2056
+ function Be(t, r) {
1847
2057
  if (!(t == null || typeof t != "object" && typeof t != "function"))
1848
2058
  return Reflect.get(t, r);
1849
2059
  }
1850
- function Er(t) {
2060
+ function zr(t) {
1851
2061
  if (t == null || typeof t != "object" && typeof t != "function" || typeof Reflect.get(t, "toString") != "function")
1852
2062
  throw new TypeError("Table serializer requires a URL");
1853
2063
  const r = Reflect.get(t, "searchParams");
1854
2064
  if (r == null || typeof Reflect.get(r, "set") != "function" || typeof Reflect.get(r, "append") != "function")
1855
2065
  throw new TypeError("Table serializer requires URL search parameters");
1856
2066
  }
1857
- function xr(t) {
1858
- const r = rt(t), e = Dt(t.data) ? null : new I(t.data, {
2067
+ function $r(t) {
2068
+ const r = it(t), e = Ht(t.data) ? null : new S(t.data, {
1859
2069
  owner: t.owner,
1860
2070
  purpose: "local table data"
1861
2071
  }), i = e ?? t.data, o = new Te(
1862
2072
  [i, r.sortEmitter, r.filtersEmitter],
1863
- ([s, n, l]) => gr(s, n, l),
2073
+ ([s, n, l]) => Ir(s, n, l),
1864
2074
  { owner: t.owner, purpose: "local table view" }
1865
2075
  );
1866
- return new tt(o, r, () => {
2076
+ return new rt(o, r, () => {
1867
2077
  o.dispose(), e == null || e.dispose();
1868
2078
  });
1869
2079
  }
1870
- function Ai(t) {
1871
- Ir(t.query);
1872
- const r = rt(t);
1873
- return new tt(t.query, r);
2080
+ function Mi(t) {
2081
+ jr(t.query);
2082
+ const r = it(t);
2083
+ return new rt(t.query, r);
1874
2084
  }
1875
- function kr(t) {
2085
+ function Or(t) {
1876
2086
  if (t.handler == null || typeof t.handler.fetch != "function")
1877
2087
  throw new TypeError("Table data-source handler must implement fetch");
1878
- const r = rt(t), e = new bt("sort", r.sortEmitter, {
2088
+ const r = it(t), e = new gt("sort", r.sortEmitter, {
1879
2089
  owner: t.owner,
1880
2090
  purpose: "table sort argument"
1881
- }), i = new bt("filters", r.filtersEmitter, {
2091
+ }), i = new gt("filters", r.filtersEmitter, {
1882
2092
  owner: t.owner,
1883
2093
  purpose: "table filters argument"
1884
- }), o = new Vt({
2094
+ }), o = new Wt({
1885
2095
  handler: t.handler,
1886
2096
  args: { sort: e, filters: i },
1887
2097
  owner: t.owner,
1888
2098
  purpose: "table query",
1889
2099
  keepPreviousValue: !0
1890
2100
  });
1891
- return new tt(o, r, () => {
2101
+ return new rt(o, r, () => {
1892
2102
  o.dispose(), e.dispose(), i.dispose();
1893
2103
  });
1894
2104
  }
1895
- function Sr(t) {
2105
+ function Ar(t) {
1896
2106
  if (typeof t.url != "string" || t.url.length === 0)
1897
2107
  throw new TypeError("REST table data source requires a URL");
1898
2108
  const r = {
1899
2109
  url: t.url,
1900
- serialize: t.serializeQuery ?? br
2110
+ serialize: t.serializeQuery ?? Sr
1901
2111
  };
1902
- return t.baseUrl != null && (r.baseUrl = t.baseUrl), t.fetch != null && (r.fetch = t.fetch), kr({
1903
- handler: new Ut(r),
2112
+ return t.baseUrl != null && (r.baseUrl = t.baseUrl), t.fetch != null && (r.fetch = t.fetch), Or({
2113
+ handler: new Gt(r),
1904
2114
  ...t.sortEmitter == null ? {} : { sortEmitter: t.sortEmitter },
1905
2115
  ...t.filtersEmitter == null ? {} : { filtersEmitter: t.filtersEmitter },
1906
2116
  ...t.owner === void 0 ? {} : { owner: t.owner }
1907
2117
  });
1908
2118
  }
1909
- class tt {
2119
+ class rt {
1910
2120
  constructor(r, e, i = null) {
1911
2121
  a(this, "sortEmitter");
1912
2122
  a(this, "filtersEmitter");
@@ -1922,11 +2132,11 @@ class tt {
1922
2132
  this.disposed || (this.disposed = !0, (r = this.disposeQuery) == null || r.call(this), (e = this.state.ownedSortEmitter) == null || e.dispose(), (i = this.state.ownedFiltersEmitter) == null || i.dispose());
1923
2133
  }
1924
2134
  }
1925
- function rt(t) {
1926
- const r = t.sortEmitter == null ? new I(null, {
2135
+ function it(t) {
2136
+ const r = t.sortEmitter == null ? new S(null, {
1927
2137
  owner: t.owner,
1928
2138
  purpose: "table sort"
1929
- }) : null, e = t.filtersEmitter == null ? new I({}, {
2139
+ }) : null, e = t.filtersEmitter == null ? new S({}, {
1930
2140
  owner: t.owner,
1931
2141
  purpose: "table filters"
1932
2142
  }) : null;
@@ -1937,11 +2147,11 @@ function rt(t) {
1937
2147
  ownedFiltersEmitter: e
1938
2148
  };
1939
2149
  }
1940
- function Dt(t) {
2150
+ function Ht(t) {
1941
2151
  return t != null && (typeof t == "object" || typeof t == "function") && typeof Reflect.get(t, "get") == "function" && typeof Reflect.get(t, "subscribe") == "function" && typeof Reflect.get(t, "getFetchState") == "function" && typeof Reflect.get(t, "getError") == "function";
1942
2152
  }
1943
- function Ir(t) {
1944
- if (!Dt(t))
2153
+ function jr(t) {
2154
+ if (!Ht(t))
1945
2155
  throw new TypeError("Table query must be an emitter");
1946
2156
  }
1947
2157
  class he extends g {
@@ -1961,7 +2171,7 @@ class he extends g {
1961
2171
  a(this, "ownedSortEmitter");
1962
2172
  a(this, "ownedFiltersEmitter");
1963
2173
  a(this, "ownedDataSource", null);
1964
- Rr(e), this.columns = Tr(e.columns), this.rowKey = Cr(e.rowKey), this.suppliedDataSource = e.dataSource ?? null, this.ownedSortEmitter = this.suppliedDataSource == null ? new I(null, { owner: this, purpose: "table sort" }) : null, this.ownedFiltersEmitter = this.suppliedDataSource == null ? new I({}, { owner: this, purpose: "table filters" }) : null, this.sortEmitter = ((i = this.suppliedDataSource) == null ? void 0 : i.sortEmitter) ?? this.ownedSortEmitter, this.filtersEmitter = ((o = this.suppliedDataSource) == null ? void 0 : o.filtersEmitter) ?? this.ownedFiltersEmitter, this.selectionHandler = e.multiSelect === !0 ? xe({
2174
+ Nr(e), this.columns = qr(e.columns), this.rowKey = Lr(e.rowKey), this.suppliedDataSource = e.dataSource ?? null, this.ownedSortEmitter = this.suppliedDataSource == null ? new S(null, { owner: this, purpose: "table sort" }) : null, this.ownedFiltersEmitter = this.suppliedDataSource == null ? new S({}, { owner: this, purpose: "table filters" }) : null, this.sortEmitter = ((i = this.suppliedDataSource) == null ? void 0 : i.sortEmitter) ?? this.ownedSortEmitter, this.filtersEmitter = ((o = this.suppliedDataSource) == null ? void 0 : o.filtersEmitter) ?? this.ownedFiltersEmitter, this.selectionHandler = e.multiSelect === !0 ? xe({
1965
2175
  owner: this,
1966
2176
  multiSelect: !0,
1967
2177
  ...e.selectedItemsEmitter == null ? {} : { selectedItemsEmitter: e.selectedItemsEmitter },
@@ -1978,15 +2188,15 @@ class he extends g {
1978
2188
  return ((s = this.query) == null ? void 0 : s.get()) ?? [];
1979
2189
  },
1980
2190
  getKey: this.rowKey
1981
- }), this.selectedItemsEmitter = this.selectionHandler.selectedItemsEmitter, this.selectedItemEmitter = this.selectionHandler instanceof Ze ? this.selectionHandler.selectedItemEmitter : null;
2191
+ }), this.selectedItemsEmitter = this.selectionHandler.selectedItemsEmitter, this.selectedItemEmitter = this.selectionHandler instanceof Xe ? this.selectionHandler.selectedItemEmitter : null;
1982
2192
  }
1983
2193
  initialize() {
1984
- this.suppliedDataSource != null ? this.dataSource = this.suppliedDataSource : this.props.rest != null ? (this.ownedDataSource = Sr({
2194
+ this.suppliedDataSource != null ? this.dataSource = this.suppliedDataSource : this.props.rest != null ? (this.ownedDataSource = Ar({
1985
2195
  ...this.props.rest,
1986
2196
  sortEmitter: this.sortEmitter,
1987
2197
  filtersEmitter: this.filtersEmitter,
1988
2198
  owner: this
1989
- }), this.dataSource = this.ownedDataSource) : (this.ownedDataSource = xr({
2199
+ }), this.dataSource = this.ownedDataSource) : (this.ownedDataSource = $r({
1990
2200
  data: this.props.data ?? [],
1991
2201
  sortEmitter: this.sortEmitter,
1992
2202
  filtersEmitter: this.filtersEmitter,
@@ -1994,20 +2204,20 @@ class he extends g {
1994
2204
  }), this.dataSource = this.ownedDataSource), this.query = this.dataSource.query, this.watch(this.query, this.selectedItemsEmitter);
1995
2205
  }
1996
2206
  render() {
1997
- var c, u, h, b;
2207
+ var c, u, p, b;
1998
2208
  const e = ((c = this.query) == null ? void 0 : c.get()) ?? [];
1999
2209
  if (!Array.isArray(e)) throw new TypeError("DataTable query value must be an array");
2000
- const i = ((u = this.query) == null ? void 0 : u.getFetchState()) ?? S.Initial, o = (h = this.query) == null ? void 0 : h.getError(), s = i === S.Initial || i === S.Loading, n = new Set(
2210
+ const i = ((u = this.query) == null ? void 0 : u.getFetchState()) ?? k.Initial, o = (p = this.query) == null ? void 0 : p.getError(), s = i === k.Initial || i === k.Loading, n = new Set(
2001
2211
  this.selectedItemsEmitter.get().map((f, m) => this.rowKey(f, m))
2002
2212
  ), l = this.Host;
2003
- return /* @__PURE__ */ v(
2213
+ return /* @__PURE__ */ y(
2004
2214
  l,
2005
2215
  {
2006
- className: x(this.props) || null,
2216
+ className: E(this.props) || null,
2007
2217
  children: [
2008
- s ? /* @__PURE__ */ p("p", { role: "status", children: "Loading rows…" }) : null,
2009
- i === S.Error ? /* @__PURE__ */ p("p", { role: "alert", children: $r(o, "Unable to load rows") }) : null,
2010
- i === S.Error && typeof ((b = this.dataSource) == null ? void 0 : b.retry) == "function" ? /* @__PURE__ */ p(
2218
+ s ? /* @__PURE__ */ h("p", { role: "status", children: "Loading rows…" }) : null,
2219
+ i === k.Error ? /* @__PURE__ */ h("p", { role: "alert", children: Dr(o, "Unable to load rows") }) : null,
2220
+ i === k.Error && typeof ((b = this.dataSource) == null ? void 0 : b.retry) == "function" ? /* @__PURE__ */ h(
2011
2221
  "button",
2012
2222
  {
2013
2223
  type: "button",
@@ -2018,9 +2228,9 @@ class he extends g {
2018
2228
  children: "Retry"
2019
2229
  }
2020
2230
  ) : null,
2021
- /* @__PURE__ */ v("table", { "aria-busy": s ? "true" : null, children: [
2022
- this.props.caption == null ? null : /* @__PURE__ */ p("caption", { children: this.props.caption }),
2023
- /* @__PURE__ */ p(
2231
+ /* @__PURE__ */ y("table", { "aria-busy": s ? "true" : null, children: [
2232
+ this.props.caption == null ? null : /* @__PURE__ */ h("caption", { children: this.props.caption }),
2233
+ /* @__PURE__ */ h(
2024
2234
  re,
2025
2235
  {
2026
2236
  columns: this.columns,
@@ -2032,7 +2242,7 @@ class he extends g {
2032
2242
  },
2033
2243
  "header"
2034
2244
  ),
2035
- /* @__PURE__ */ p("tbody", { children: e.length > 0 ? e.map((f, m) => this.renderRow(f, m, n)) : s ? this.renderPlaceholders() : i === S.Error ? null : /* @__PURE__ */ p("tr", { children: /* @__PURE__ */ p("td", { colSpan: this.columns.length, children: this.props.emptyMessage ?? "No rows" }) }, "empty") })
2245
+ /* @__PURE__ */ h("tbody", { children: e.length > 0 ? e.map((f, m) => this.renderRow(f, m, n)) : s ? this.renderPlaceholders() : i === k.Error ? null : /* @__PURE__ */ h("tr", { children: /* @__PURE__ */ h("td", { colSpan: this.columns.length, children: this.props.emptyMessage ?? "No rows" }) }, "empty") })
2036
2246
  ] })
2037
2247
  ]
2038
2248
  }
@@ -2040,21 +2250,21 @@ class he extends g {
2040
2250
  }
2041
2251
  renderRow(e, i, o) {
2042
2252
  const s = this.rowKey(e, i), n = o.has(s);
2043
- return /* @__PURE__ */ p(
2253
+ return /* @__PURE__ */ h(
2044
2254
  "tr",
2045
2255
  {
2046
2256
  "data-fray-selectable-row": "",
2047
2257
  "aria-selected": String(n),
2048
2258
  tabIndex: i === 0 ? 0 : -1,
2049
- children: this.columns.map((l) => /* @__PURE__ */ p("td", { children: l.render ? l.render(e, i) : zr(e[l.field]) }, String(l.field)))
2259
+ children: this.columns.map((l) => /* @__PURE__ */ h("td", { children: l.render ? l.render(e, i) : Fr(e[l.field]) }, String(l.field)))
2050
2260
  },
2051
2261
  String(s)
2052
2262
  );
2053
2263
  }
2054
2264
  renderPlaceholders() {
2055
2265
  const e = this.props.placeholderCount ?? 5;
2056
- return Array.from({ length: e }, (i, o) => /* @__PURE__ */ p("tr", { children: this.columns.map((s, n) => /* @__PURE__ */ p("td", { children: /* @__PURE__ */ p(
2057
- H,
2266
+ return Array.from({ length: e }, (i, o) => /* @__PURE__ */ h("tr", { children: this.columns.map((s, n) => /* @__PURE__ */ h("td", { children: /* @__PURE__ */ h(
2267
+ M,
2058
2268
  {
2059
2269
  width: 45 + (o + n) % 6 * 8
2060
2270
  }
@@ -2082,7 +2292,7 @@ class he extends g {
2082
2292
  this.selectionHandler.destroy(), (e = this.ownedDataSource) == null || e.dispose(), (i = this.ownedSortEmitter) == null || i.dispose(), (o = this.ownedFiltersEmitter) == null || o.dispose();
2083
2293
  }
2084
2294
  }
2085
- a(he, "liveProps", []), a(he, "dependencies", [H, re]), a(he, "hostName", "data-table"), a(he, "css", E`
2295
+ a(he, "liveProps", []), a(he, "dependencies", [M, re]), a(he, "hostName", "data-table"), a(he, "css", w`
2086
2296
  & {
2087
2297
  display: block;
2088
2298
  overflow: auto;
@@ -2143,7 +2353,7 @@ a(he, "liveProps", []), a(he, "dependencies", [H, re]), a(he, "hostName", "data-
2143
2353
  }
2144
2354
 
2145
2355
  `);
2146
- function Tr(t) {
2356
+ function qr(t) {
2147
2357
  if (!Array.isArray(t) || t.length === 0)
2148
2358
  throw new TypeError("DataTable columns must be a non-empty array");
2149
2359
  const r = /* @__PURE__ */ new Set();
@@ -2161,7 +2371,7 @@ function Tr(t) {
2161
2371
  return e;
2162
2372
  });
2163
2373
  }
2164
- function Rr(t) {
2374
+ function Nr(t) {
2165
2375
  var n, l;
2166
2376
  const e = [
2167
2377
  "mode",
@@ -2185,8 +2395,8 @@ function Rr(t) {
2185
2395
  throw new TypeError("DataTable dataSource must implement the table data-source contract");
2186
2396
  }
2187
2397
  }
2188
- function Cr(t) {
2189
- if (t == null) return Xe;
2398
+ function Lr(t) {
2399
+ if (t == null) return et;
2190
2400
  if (typeof t == "function") return t;
2191
2401
  if (typeof t == "string" && t.length > 0)
2192
2402
  return (r, e) => {
@@ -2197,19 +2407,19 @@ function Cr(t) {
2197
2407
  };
2198
2408
  throw new TypeError("DataTable rowKey must be a function or property name");
2199
2409
  }
2200
- function zr(t) {
2410
+ function Fr(t) {
2201
2411
  return t == null || typeof t == "string" || typeof t == "number" ? t : String(t);
2202
2412
  }
2203
- function $r(t, r) {
2413
+ function Dr(t, r) {
2204
2414
  return t instanceof Error ? t.message : t == null ? r : String(t);
2205
2415
  }
2206
- class it extends g {
2416
+ class ot extends g {
2207
2417
  render() {
2208
2418
  return this.props.children ?? [];
2209
2419
  }
2210
2420
  }
2211
- a(it, "liveProps", []);
2212
- function G(t) {
2421
+ a(ot, "liveProps", []);
2422
+ function W(t) {
2213
2423
  if (!Array.isArray(t)) throw new TypeError("Tree nodes must be an array");
2214
2424
  const r = /* @__PURE__ */ new Set(), e = (i) => {
2215
2425
  for (const o of i) {
@@ -2223,49 +2433,49 @@ function G(t) {
2223
2433
  };
2224
2434
  e(t);
2225
2435
  }
2226
- function ji(t, r) {
2227
- return G(t), ot(t, r);
2436
+ function Hi(t, r) {
2437
+ return W(t), st(t, r);
2228
2438
  }
2229
- function qi(t, r, e = null) {
2439
+ function Vi(t, r, e = null) {
2230
2440
  return new Te(
2231
2441
  [t, r],
2232
- ([i, o]) => (G(i), o == null ? null : ot(i, o)),
2442
+ ([i, o]) => (W(i), o == null ? null : st(i, o)),
2233
2443
  { owner: e, purpose: "tree node projection" }
2234
2444
  );
2235
2445
  }
2236
- function Or(t, r, e) {
2237
- if (G(t), typeof e != "function") throw new TypeError("Tree node update must be a function");
2446
+ function Pr(t, r, e) {
2447
+ if (W(t), typeof e != "function") throw new TypeError("Tree node update must be a function");
2238
2448
  const i = (s) => {
2239
2449
  for (let n = 0; n < s.length; n += 1) {
2240
2450
  const l = s[n];
2241
2451
  if (Object.is(l.id, r)) {
2242
- const h = e(l);
2243
- if (h == null || typeof h != "object")
2452
+ const p = e(l);
2453
+ if (p == null || typeof p != "object")
2244
2454
  throw new TypeError("Tree node update must return a tree node");
2245
- if (!Object.is(h.id, l.id))
2455
+ if (!Object.is(p.id, l.id))
2246
2456
  throw new Error("Tree node update cannot change the stable id");
2247
- if (Object.is(h, l)) return s;
2457
+ if (Object.is(p, l)) return s;
2248
2458
  const b = [...s];
2249
- return b[n] = h, b;
2459
+ return b[n] = p, b;
2250
2460
  }
2251
2461
  const c = l.children ?? [], u = i(c);
2252
2462
  if (!Object.is(u, c)) {
2253
- const h = [...s];
2254
- return h[n] = { ...l, children: u }, h;
2463
+ const p = [...s];
2464
+ return p[n] = { ...l, children: u }, p;
2255
2465
  }
2256
2466
  }
2257
2467
  return s;
2258
2468
  }, o = i(t);
2259
- return Object.is(o, t) || G(o), o;
2469
+ return Object.is(o, t) || W(o), o;
2260
2470
  }
2261
- function Ni(t, r, e, i = "tree node updated") {
2262
- const o = t.get(), s = Or(o, r, e);
2471
+ function Ui(t, r, e, i = "tree node updated") {
2472
+ const o = t.get(), s = Pr(o, r, e);
2263
2473
  return Object.is(s, o) ? !1 : t.set(s, i);
2264
2474
  }
2265
- function ot(t, r) {
2475
+ function st(t, r) {
2266
2476
  for (const e of t) {
2267
2477
  if (Object.is(e.id, r)) return e;
2268
- const i = ot(e.children ?? [], r);
2478
+ const i = st(e.children ?? [], r);
2269
2479
  if (i != null) return i;
2270
2480
  }
2271
2481
  return null;
@@ -2282,16 +2492,16 @@ class pe extends g {
2282
2492
  a(this, "focusedKey", null);
2283
2493
  a(this, "typeahead", "");
2284
2494
  a(this, "typeaheadTimer", null);
2285
- if (kt(e.nodes))
2495
+ if (Tt(e.nodes))
2286
2496
  this.nodesEmitter = e.nodes, this.ownedNodesEmitter = null;
2287
2497
  else {
2288
- const i = e.nodes ?? Be(e.children);
2289
- this.ownedNodesEmitter = new I(i, {
2498
+ const i = e.nodes ?? We(e.children);
2499
+ this.ownedNodesEmitter = new S(i, {
2290
2500
  owner: this,
2291
2501
  purpose: "tree nodes"
2292
2502
  }), this.nodesEmitter = this.ownedNodesEmitter;
2293
2503
  }
2294
- this.ownedSelectedEmitter = e.selectedKeyEmitter == null ? new I(null, { owner: this, purpose: "selected tree key" }) : null, this.selectedKeyEmitter = e.selectedKeyEmitter ?? this.ownedSelectedEmitter, this.ownedExpandedEmitter = e.expandedKeysEmitter == null ? new I([], { owner: this, purpose: "expanded tree keys" }) : null, this.expandedKeysEmitter = e.expandedKeysEmitter ?? this.ownedExpandedEmitter;
2504
+ this.ownedSelectedEmitter = e.selectedKeyEmitter == null ? new S(null, { owner: this, purpose: "selected tree key" }) : null, this.selectedKeyEmitter = e.selectedKeyEmitter ?? this.ownedSelectedEmitter, this.ownedExpandedEmitter = e.expandedKeysEmitter == null ? new S([], { owner: this, purpose: "expanded tree keys" }) : null, this.expandedKeysEmitter = e.expandedKeysEmitter ?? this.ownedExpandedEmitter;
2295
2505
  }
2296
2506
  initialize() {
2297
2507
  this.reconcile(this.nodesEmitter.get()), this.watch(this.nodesEmitter, this.selectedKeyEmitter, this.expandedKeysEmitter), this.onCleanup(this.nodesEmitter.subscribe(({ value: e }) => this.reconcile(e), {
@@ -2300,12 +2510,12 @@ class pe extends g {
2300
2510
  }
2301
2511
  setProps(e) {
2302
2512
  if (this.ownedNodesEmitter != null) {
2303
- if (kt(e.nodes))
2513
+ if (Tt(e.nodes))
2304
2514
  throw new TypeError(
2305
2515
  "TreeView cannot replace static or declarative nodes with an emitter"
2306
2516
  );
2307
2517
  this.ownedNodesEmitter.set(
2308
- e.nodes ?? Be(e.children),
2518
+ e.nodes ?? We(e.children),
2309
2519
  "tree structure changed"
2310
2520
  );
2311
2521
  }
@@ -2313,46 +2523,46 @@ class pe extends g {
2313
2523
  }
2314
2524
  render() {
2315
2525
  const e = this.nodesEmitter.get();
2316
- G(e);
2317
- const i = this.nodesEmitter.getFetchState(), o = this.nodesEmitter.getError(), s = new Set(this.expandedKeysEmitter.get()), n = xt(e, s), l = this.selectedKeyEmitter.get(), c = n.find(({ node: h }) => Object.is(h.id, this.focusedKey)) ?? n.find(({ node: h }) => Object.is(h.id, l)) ?? n[0] ?? null;
2526
+ W(e);
2527
+ const i = this.nodesEmitter.getFetchState(), o = this.nodesEmitter.getError(), s = new Set(this.expandedKeysEmitter.get()), n = It(e, s), l = this.selectedKeyEmitter.get(), c = n.find(({ node: p }) => Object.is(p.id, this.focusedKey)) ?? n.find(({ node: p }) => Object.is(p.id, l)) ?? n[0] ?? null;
2318
2528
  this.focusedKey = (c == null ? void 0 : c.node.id) ?? null;
2319
2529
  const u = this.Host;
2320
- return /* @__PURE__ */ v(u, { className: x(this.props) || null, children: [
2321
- i === S.Error ? /* @__PURE__ */ p("p", { role: "alert", children: Ar(o, "Unable to load tree items") }) : null,
2322
- i !== S.Error && n.length === 0 ? /* @__PURE__ */ p("p", { role: "status", children: "No tree items" }) : /* @__PURE__ */ p("ul", { role: "tree", "aria-label": this.props.label, children: n.map((h, b) => {
2323
- var N, Y, J, ht, pt, ft, mt;
2324
- const { node: f, depth: m, position: C, setSize: T } = h, k = (((N = f.children) == null ? void 0 : N.length) ?? 0) > 0, O = k && s.has(f.id), P = Object.is(f.id, l), K = ((J = (Y = this.props).renderItem) == null ? void 0 : J.call(Y, f, m)) ?? f.label, M = (pt = (ht = this.props).itemLabelClassName) == null ? void 0 : pt.call(ht, f, m), z = (mt = (ft = this.props).itemLabelStyle) == null ? void 0 : mt.call(ft, f, m);
2325
- return /* @__PURE__ */ v(
2530
+ return /* @__PURE__ */ y(u, { className: E(this.props) || null, children: [
2531
+ i === k.Error ? /* @__PURE__ */ h("p", { role: "alert", children: Kr(o, "Unable to load tree items") }) : null,
2532
+ i !== k.Error && n.length === 0 ? /* @__PURE__ */ h("p", { role: "status", children: "No tree items" }) : /* @__PURE__ */ h("ul", { role: "tree", "aria-label": this.props.label, children: n.map((p, b) => {
2533
+ var q, G, Y, pt, ft, mt, bt;
2534
+ const { node: f, depth: m, position: R, setSize: T } = p, x = (((q = f.children) == null ? void 0 : q.length) ?? 0) > 0, $ = x && s.has(f.id), D = Object.is(f.id, l), P = ((Y = (G = this.props).renderItem) == null ? void 0 : Y.call(G, f, m)) ?? f.label, K = (ft = (pt = this.props).itemLabelClassName) == null ? void 0 : ft.call(pt, f, m), C = (bt = (mt = this.props).itemLabelStyle) == null ? void 0 : bt.call(mt, f, m);
2535
+ return /* @__PURE__ */ y(
2326
2536
  "li",
2327
2537
  {
2328
2538
  role: "treeitem",
2329
2539
  "data-index": b,
2330
2540
  "aria-level": m + 1,
2331
- "aria-posinset": C,
2541
+ "aria-posinset": R,
2332
2542
  "aria-setsize": T,
2333
- "aria-expanded": k ? String(O) : null,
2334
- "aria-selected": String(P),
2543
+ "aria-expanded": x ? String($) : null,
2544
+ "aria-selected": String(D),
2335
2545
  tabIndex: Object.is(f.id, c == null ? void 0 : c.node.id) ? 0 : -1,
2336
2546
  style: { "--tree-depth": m },
2337
- onClick: (se) => {
2338
- if (this.focusedKey = f.id, Lr(se.target) && k) {
2547
+ onClick: (ne) => {
2548
+ if (this.focusedKey = f.id, Ur(ne.target) && x) {
2339
2549
  this.toggleExpanded(f.id), this.focusRow(f.id);
2340
2550
  return;
2341
2551
  }
2342
- this.selectNode(f, se);
2552
+ this.selectNode(f, ne);
2343
2553
  },
2344
2554
  onFocus: () => this.focusedKey = f.id,
2345
- onKeyDown: (se) => this.handleKeyDown(se, b, n),
2555
+ onKeyDown: (ne) => this.handleKeyDown(ne, b, n),
2346
2556
  children: [
2347
- w(
2348
- "fray-expander",
2349
- { "aria-hidden": "true" },
2350
- k ? O ? "▾" : "▸" : "•"
2351
- ),
2352
- w("fray-label", {
2353
- ...M == null ? {} : { className: M },
2354
- ...z == null ? {} : { style: z }
2355
- }, K)
2557
+ /* @__PURE__ */ h("fray-expander", { "aria-hidden": "true", children: x ? $ ? "▾" : "▸" : "•" }),
2558
+ /* @__PURE__ */ h(
2559
+ "fray-label",
2560
+ {
2561
+ ...K == null ? {} : { className: K },
2562
+ ...C == null ? {} : { style: C },
2563
+ children: P
2564
+ }
2565
+ )
2356
2566
  ]
2357
2567
  },
2358
2568
  f.id
@@ -2365,14 +2575,14 @@ class pe extends g {
2365
2575
  this.typeaheadTimer != null && clearTimeout(this.typeaheadTimer), (e = this.ownedNodesEmitter) == null || e.dispose(), (i = this.ownedSelectedEmitter) == null || i.dispose(), (o = this.ownedExpandedEmitter) == null || o.dispose();
2366
2576
  }
2367
2577
  reconcile(e) {
2368
- G(e);
2369
- const i = new Set(jr(e).map(({ node: l }) => l.id)), o = this.selectedKeyEmitter.get();
2578
+ W(e);
2579
+ const i = new Set(Mr(e).map(({ node: l }) => l.id)), o = this.selectedKeyEmitter.get();
2370
2580
  this.ownedSelectedEmitter != null && o != null && !i.has(o) && this.selectedKeyEmitter.set(null, "selected tree item removed");
2371
2581
  const s = this.expandedKeysEmitter.get(), n = s.filter((l) => i.has(l));
2372
- this.ownedExpandedEmitter != null && !Nr(s, n) && this.expandedKeysEmitter.set(n, "removed tree expansions reconciled"), this.focusedKey != null && !i.has(this.focusedKey) && (this.focusedKey = null);
2582
+ this.ownedExpandedEmitter != null && !Vr(s, n) && this.expandedKeysEmitter.set(n, "removed tree expansions reconciled"), this.focusedKey != null && !i.has(this.focusedKey) && (this.focusedKey = null);
2373
2583
  }
2374
2584
  selectNode(e, i) {
2375
- this.selectedKeyEmitter.set(e.id, "tree item selected"), $(this.props.onSelect, e, i), this.focusRow(e.id);
2585
+ this.selectedKeyEmitter.set(e.id, "tree item selected"), z(this.props.onSelect, e, i), this.focusRow(e.id);
2376
2586
  }
2377
2587
  toggleExpanded(e) {
2378
2588
  const i = this.expandedKeysEmitter.get(), o = i.some((s) => Object.is(s, e));
@@ -2391,9 +2601,9 @@ class pe extends g {
2391
2601
  if (e.key === "End") return this.move(e, (u = o.at(-1)) == null ? void 0 : u.node.id);
2392
2602
  if (e.key === "ArrowRight") {
2393
2603
  e.preventDefault();
2394
- const h = s.node.children ?? [];
2395
- if (h.length === 0) return;
2396
- this.expandedKeysEmitter.get().some((f) => Object.is(f, s.node.id)) ? this.focusRow(h[0].id) : this.toggleExpanded(s.node.id);
2604
+ const p = s.node.children ?? [];
2605
+ if (p.length === 0) return;
2606
+ this.expandedKeysEmitter.get().some((f) => Object.is(f, s.node.id)) ? this.focusRow(p[0].id) : this.toggleExpanded(s.node.id);
2397
2607
  return;
2398
2608
  }
2399
2609
  if (e.key === "ArrowLeft") {
@@ -2415,7 +2625,7 @@ class pe extends g {
2415
2625
  this.focusedKey = e;
2416
2626
  const i = this.dom instanceof Element ? [...this.dom.querySelectorAll('[role="treeitem"]')] : [];
2417
2627
  for (const s of i) {
2418
- const n = Number(s.dataset.index), l = xt(
2628
+ const n = Number(s.dataset.index), l = It(
2419
2629
  this.nodesEmitter.get(),
2420
2630
  new Set(this.expandedKeysEmitter.get())
2421
2631
  ), c = Object.is((o = l[n]) == null ? void 0 : o.node.id, e);
@@ -2426,11 +2636,11 @@ class pe extends g {
2426
2636
  e.preventDefault(), this.typeaheadTimer != null && clearTimeout(this.typeaheadTimer), this.typeahead += e.key.toLocaleLowerCase(), this.typeaheadTimer = setTimeout(() => {
2427
2637
  this.typeahead = "", this.typeaheadTimer = null;
2428
2638
  }, 650);
2429
- const n = [...i.slice(o + 1), ...i.slice(0, o + 1)].find(({ node: l }) => qr(l).toLocaleLowerCase().startsWith(this.typeahead));
2639
+ const n = [...i.slice(o + 1), ...i.slice(0, o + 1)].find(({ node: l }) => Hr(l).toLocaleLowerCase().startsWith(this.typeahead));
2430
2640
  n != null && this.focusRow(n.node.id);
2431
2641
  }
2432
2642
  }
2433
- a(pe, "liveProps", []), a(pe, "dependencies", [it]), a(pe, "hostName", "tree-view"), a(pe, "css", E`
2643
+ a(pe, "liveProps", []), a(pe, "dependencies", [ot]), a(pe, "hostName", "tree-view"), a(pe, "css", w`
2434
2644
  & {
2435
2645
  display: flex;
2436
2646
  flex-direction: column;
@@ -2502,11 +2712,11 @@ a(pe, "liveProps", []), a(pe, "dependencies", [it]), a(pe, "hostName", "tree-vie
2502
2712
  }
2503
2713
  }
2504
2714
  `);
2505
- function Ar(t, r) {
2715
+ function Kr(t, r) {
2506
2716
  return t instanceof Error ? t.message : t == null ? r : String(t);
2507
2717
  }
2508
- function Be(t) {
2509
- return (Array.isArray(t) ? t : t == null ? [] : [t]).filter((e) => we(e) && e.type === it).map((e) => {
2718
+ function We(t) {
2719
+ return (Array.isArray(t) ? t : t == null ? [] : [t]).filter((e) => we(e) && e.type === ot).map((e) => {
2510
2720
  if (!we(e)) throw new TypeError("TreeView children must be TreeItem nodes");
2511
2721
  const i = e.props;
2512
2722
  return {
@@ -2514,11 +2724,11 @@ function Be(t) {
2514
2724
  label: i.label,
2515
2725
  ...i.textValue == null ? {} : { textValue: i.textValue },
2516
2726
  ...i.value === void 0 ? {} : { value: i.value },
2517
- children: Be(i.children)
2727
+ children: We(i.children)
2518
2728
  };
2519
2729
  });
2520
2730
  }
2521
- function xt(t, r) {
2731
+ function It(t, r) {
2522
2732
  const e = [], i = (o, s, n) => {
2523
2733
  o.forEach((l, c) => {
2524
2734
  var u;
@@ -2527,7 +2737,7 @@ function xt(t, r) {
2527
2737
  };
2528
2738
  return i(t, 0, null), e;
2529
2739
  }
2530
- function jr(t) {
2740
+ function Mr(t) {
2531
2741
  const r = /* @__PURE__ */ new Set(), e = [], i = (o, s, n) => {
2532
2742
  o.forEach((l, c) => {
2533
2743
  if (r.has(l.id)) throw new Error(`Duplicate tree item id: ${String(l.id)}`);
@@ -2536,19 +2746,19 @@ function jr(t) {
2536
2746
  };
2537
2747
  return i(t, 0, null), e;
2538
2748
  }
2539
- function qr(t) {
2749
+ function Hr(t) {
2540
2750
  return t.textValue != null ? t.textValue : typeof t.label == "string" || typeof t.label == "number" ? String(t.label) : String(t.id);
2541
2751
  }
2542
- function Nr(t, r) {
2752
+ function Vr(t, r) {
2543
2753
  return t.length === r.length && t.every((e, i) => Object.is(e, r[i]));
2544
2754
  }
2545
- function kt(t) {
2755
+ function Tt(t) {
2546
2756
  return t != null && (typeof t == "object" || typeof t == "function") && typeof Reflect.get(t, "get") == "function" && typeof Reflect.get(t, "subscribe") == "function";
2547
2757
  }
2548
- function Lr(t) {
2758
+ function Ur(t) {
2549
2759
  return t instanceof Element && t.closest("fray-expander") != null;
2550
2760
  }
2551
- const Fr = ["disabled", "pressed", "busy"];
2761
+ const _r = ["disabled", "pressed", "busy"];
2552
2762
  class ie extends g {
2553
2763
  constructor(r = {}) {
2554
2764
  if (super(r), r.onClick != null && typeof r.onClick != "function")
@@ -2565,32 +2775,32 @@ class ie extends g {
2565
2775
  busyLabel: l,
2566
2776
  id: c,
2567
2777
  name: u,
2568
- value: h,
2778
+ value: p,
2569
2779
  title: b,
2570
2780
  ariaLabel: f,
2571
2781
  onClick: m
2572
- } = this.props, T = (Array.isArray(r) ? r.length > 0 : r != null && typeof r != "boolean") ? r : e ?? "", k = n ? l ?? T : T, O = o || n, P = this.Host;
2573
- return /* @__PURE__ */ p(P, { className: x(this.props) || null, children: /* @__PURE__ */ p(
2782
+ } = this.props, T = (Array.isArray(r) ? r.length > 0 : r != null && typeof r != "boolean") ? r : e ?? "", x = n ? l ?? T : T, $ = o || n, D = this.Host;
2783
+ return /* @__PURE__ */ h(D, { className: E(this.props) || null, children: /* @__PURE__ */ h(
2574
2784
  "button",
2575
2785
  {
2576
2786
  id: c,
2577
2787
  name: u,
2578
- value: h == null ? void 0 : String(h),
2788
+ value: p == null ? void 0 : String(p),
2579
2789
  title: b,
2580
2790
  type: i,
2581
- disabled: O,
2791
+ disabled: $,
2582
2792
  "aria-label": f,
2583
2793
  "aria-pressed": s == null ? null : String(!!s),
2584
2794
  "aria-busy": n ? "true" : null,
2585
- onClick: (K) => {
2586
- O || $(m, K);
2795
+ onClick: (P) => {
2796
+ $ || z(m, P);
2587
2797
  },
2588
- children: k
2798
+ children: x
2589
2799
  }
2590
2800
  ) });
2591
2801
  }
2592
2802
  }
2593
- a(ie, "liveProps", Fr), a(ie, "hostName", "button"), a(ie, "css", E`
2803
+ a(ie, "liveProps", _r), a(ie, "hostName", "button"), a(ie, "css", w`
2594
2804
  & > button {
2595
2805
  min-height: var(--control-min-height, 2rem);
2596
2806
  padding: var(--space-xs) var(--space-sm);
@@ -2633,7 +2843,7 @@ a(ie, "liveProps", Fr), a(ie, "hostName", "button"), a(ie, "css", E`
2633
2843
  pointer-events: none;
2634
2844
  }
2635
2845
  `);
2636
- const Dr = ["showCloseButton"];
2846
+ const Qr = ["showCloseButton"];
2637
2847
  class fe extends g {
2638
2848
  constructor(e) {
2639
2849
  super(e);
@@ -2644,7 +2854,7 @@ class fe extends g {
2644
2854
  a(this, "dialogElement", null);
2645
2855
  a(this, "restoreFocusTo", null);
2646
2856
  a(this, "synchronizedOpen", !1);
2647
- this.openEmitter = F(this, e, !1, "dialog open state"), this.dialogId = R("dialog", e.id), this.titleId = `${this.dialogId}-title`, this.descriptionId = `${this.dialogId}-description`;
2857
+ this.openEmitter = L(this, e, !1, "dialog open state"), this.dialogId = I("dialog", e.id), this.titleId = `${this.dialogId}-title`, this.descriptionId = `${this.dialogId}-description`;
2648
2858
  }
2649
2859
  initialize() {
2650
2860
  this.watch(this.openEmitter);
@@ -2658,7 +2868,7 @@ class fe extends g {
2658
2868
  showCloseButton: n = !0,
2659
2869
  children: l = []
2660
2870
  } = this.props, c = this.Host;
2661
- return /* @__PURE__ */ p(c, { className: x(this.props) || null, children: /* @__PURE__ */ v(
2871
+ return /* @__PURE__ */ h(c, { className: E(this.props) || null, children: /* @__PURE__ */ y(
2662
2872
  "dialog",
2663
2873
  {
2664
2874
  id: this.dialogId,
@@ -2667,12 +2877,12 @@ class fe extends g {
2667
2877
  "aria-modal": "true",
2668
2878
  ref: (u) => this.dialogElement = u,
2669
2879
  children: [
2670
- /* @__PURE__ */ p("header", { children: /* @__PURE__ */ p("h2", { id: this.titleId, children: e }) }),
2671
- i == null ? null : /* @__PURE__ */ p("p", { id: this.descriptionId, children: i }),
2672
- w("fray-content", null, l),
2673
- o == null && !n ? null : /* @__PURE__ */ v("footer", { children: [
2880
+ /* @__PURE__ */ h("header", { children: /* @__PURE__ */ h("h2", { id: this.titleId, children: e }) }),
2881
+ i == null ? null : /* @__PURE__ */ h("p", { id: this.descriptionId, children: i }),
2882
+ /* @__PURE__ */ h("fray-content", { children: l }),
2883
+ o == null && !n ? null : /* @__PURE__ */ y("footer", { children: [
2674
2884
  o,
2675
- n ? /* @__PURE__ */ p(
2885
+ n ? /* @__PURE__ */ h(
2676
2886
  ie,
2677
2887
  {
2678
2888
  label: s,
@@ -2711,7 +2921,7 @@ class fe extends g {
2711
2921
  const i = this.openEmitter.get();
2712
2922
  if (i && !e.open) {
2713
2923
  const o = document.activeElement;
2714
- this.restoreFocusTo = o instanceof HTMLElement ? o : null, Pr(e), this.synchronizedOpen = !0, Kr(e, this.props.initialFocusRef);
2924
+ this.restoreFocusTo = o instanceof HTMLElement ? o : null, Br(e), this.synchronizedOpen = !0, Wr(e, this.props.initialFocusRef);
2715
2925
  return;
2716
2926
  }
2717
2927
  if (!i && e.open) {
@@ -2724,10 +2934,10 @@ class fe extends g {
2724
2934
  if (!this.synchronizedOpen && this.restoreFocusTo == null) return;
2725
2935
  this.synchronizedOpen = !1;
2726
2936
  const e = this.restoreFocusTo;
2727
- this.restoreFocusTo = null, (e == null ? void 0 : e.isConnected) === !0 && e.focus(), $(this.props.onClose);
2937
+ this.restoreFocusTo = null, (e == null ? void 0 : e.isConnected) === !0 && e.focus(), z(this.props.onClose);
2728
2938
  }
2729
2939
  }
2730
- a(fe, "liveProps", Dr), a(fe, "hostName", "dialog"), a(fe, "dependencies", [ie]), a(fe, "css", E`
2940
+ a(fe, "liveProps", Qr), a(fe, "hostName", "dialog"), a(fe, "dependencies", [ie]), a(fe, "css", w`
2731
2941
  & > dialog {
2732
2942
  z-index: 2;
2733
2943
  width: min(38rem, calc(100vw - 2rem));
@@ -2801,7 +3011,7 @@ a(fe, "liveProps", Dr), a(fe, "hostName", "dialog"), a(fe, "dependencies", [ie])
2801
3011
  }
2802
3012
  }
2803
3013
  `);
2804
- function Pr(t) {
3014
+ function Br(t) {
2805
3015
  if (!t.open) {
2806
3016
  if (typeof t.showModal == "function") {
2807
3017
  t.showModal();
@@ -2810,38 +3020,38 @@ function Pr(t) {
2810
3020
  t.setAttribute("open", "");
2811
3021
  }
2812
3022
  }
2813
- function Kr(t, r) {
3023
+ function Wr(t, r) {
2814
3024
  const i = (r == null || typeof r == "function" ? null : r.current) ?? t.querySelector(
2815
3025
  '[autofocus], button, input, select, textarea, [tabindex]:not([tabindex="-1"])'
2816
3026
  );
2817
3027
  i == null || i.focus();
2818
3028
  }
2819
- const _ = class _ extends j {
3029
+ const U = class U extends A {
2820
3030
  constructor(r = {}) {
2821
- super({ ...r, symbols: _.symbols });
3031
+ super({ ...r, symbols: U.symbols });
2822
3032
  }
2823
3033
  };
2824
- a(_, "hostName", "quadcheckbox"), a(_, "symbols", [
2825
- ["×", y.Deny],
2826
- ["☐", y.Neutral],
2827
- ["✓", y.Prefer],
2828
- ["+", y.Require]
2829
- ]), a(_, "defaultSemanticState", y.Neutral);
2830
- let St = _;
2831
- const Q = class Q extends j {
3034
+ a(U, "hostName", "quadcheckbox"), a(U, "symbols", [
3035
+ ["×", v.Deny],
3036
+ ["☐", v.Neutral],
3037
+ ["✓", v.Prefer],
3038
+ ["+", v.Require]
3039
+ ]), a(U, "defaultSemanticState", v.Neutral);
3040
+ let Rt = U;
3041
+ const _ = class _ extends A {
2832
3042
  constructor(r = {}) {
2833
- super({ ...r, symbols: Q.symbols });
3043
+ super({ ...r, symbols: _.symbols });
2834
3044
  }
2835
3045
  };
2836
- a(Q, "hostName", "tricheckbox"), a(Q, "symbols", [
2837
- ["×", y.Deny],
2838
- ["☐", y.Neutral],
2839
- ["✓", y.Prefer]
2840
- ]), a(Q, "defaultSemanticState", y.Neutral);
2841
- let It = Q;
2842
- class st extends g {
2843
- }
2844
- a(st, "css", E`
3046
+ a(_, "hostName", "tricheckbox"), a(_, "symbols", [
3047
+ ["×", v.Deny],
3048
+ ["☐", v.Neutral],
3049
+ ["✓", v.Prefer]
3050
+ ]), a(_, "defaultSemanticState", v.Neutral);
3051
+ let Ct = _;
3052
+ class nt extends g {
3053
+ }
3054
+ a(nt, "css", w`
2845
3055
  & {
2846
3056
  display: flex;
2847
3057
  flex-flow: row nowrap;
@@ -2862,9 +3072,9 @@ a(st, "css", E`
2862
3072
  }
2863
3073
 
2864
3074
  `);
2865
- class nt extends st {
3075
+ class at extends nt {
2866
3076
  }
2867
- a(nt, "css", E`
3077
+ a(at, "css", w`
2868
3078
  & > fray-selectshell {
2869
3079
  display: flex;
2870
3080
  flex-flow: row nowrap;
@@ -2962,8 +3172,8 @@ a(nt, "css", E`
2962
3172
  }
2963
3173
  }
2964
3174
  `);
2965
- const Mr = ["disabled", "required", "error"];
2966
- class Oe extends nt {
3175
+ const Gr = ["disabled", "required", "error"];
3176
+ class Ae extends at {
2967
3177
  constructor(e = {}) {
2968
3178
  var s;
2969
3179
  super(e);
@@ -2972,14 +3182,14 @@ class Oe extends nt {
2972
3182
  a(this, "optionsEmitter");
2973
3183
  a(this, "valueEmitter");
2974
3184
  a(this, "ownsOptionsEmitter");
2975
- this.inputId = R("dropdown", e.id), this.errorId = `${this.inputId}-error`;
3185
+ this.inputId = I("dropdown", e.id), this.errorId = `${this.inputId}-error`;
2976
3186
  const i = e.options ?? [];
2977
- Hr(i) ? (this.optionsEmitter = i, this.ownsOptionsEmitter = !1) : (ve(i), this.optionsEmitter = new I(i, {
3187
+ Yr(i) ? (this.optionsEmitter = i, this.ownsOptionsEmitter = !1) : (ve(i), this.optionsEmitter = new S(i, {
2978
3188
  owner: this,
2979
3189
  purpose: "dropdown options"
2980
3190
  }), this.ownsOptionsEmitter = !0);
2981
3191
  const o = ((s = this.optionsEmitter.get()[0]) == null ? void 0 : s.value) ?? "";
2982
- this.valueEmitter = F(this, e, o, "dropdown value");
3192
+ this.valueEmitter = L(this, e, o, "dropdown value");
2983
3193
  }
2984
3194
  initialize() {
2985
3195
  this.watch(this.valueEmitter, this.optionsEmitter);
@@ -2994,54 +3204,50 @@ class Oe extends nt {
2994
3204
  placeholder: l = "Select…",
2995
3205
  ariaLabel: c,
2996
3206
  onChange: u
2997
- } = this.props, h = this.optionsEmitter.get() ?? [];
2998
- ve(h);
3207
+ } = this.props, p = this.optionsEmitter.get() ?? [];
3208
+ ve(p);
2999
3209
  const b = this.valueEmitter.get(), f = this.Host;
3000
- return /* @__PURE__ */ v(
3210
+ return /* @__PURE__ */ y(
3001
3211
  f,
3002
3212
  {
3003
- className: x(this.props),
3213
+ className: E(this.props),
3004
3214
  children: [
3005
- e == null ? null : /* @__PURE__ */ p("label", { htmlFor: this.inputId, children: e }),
3006
- w(
3007
- "fray-selectshell",
3008
- null,
3009
- /* @__PURE__ */ v(
3010
- "select",
3011
- {
3012
- id: this.inputId,
3013
- name: i,
3014
- value: b == null ? "" : String(b),
3015
- disabled: o,
3016
- required: s,
3017
- "aria-label": e == null ? c : null,
3018
- "aria-invalid": n == null ? null : "true",
3019
- "aria-describedby": n == null ? null : this.errorId,
3020
- onChange: (m) => {
3021
- const C = Vr(m, "dropdown change"), T = h.find(({ value: O }) => String(O) === C), k = (T == null ? void 0 : T.value) ?? C;
3022
- this.valueEmitter.set(k, "dropdown selection"), $(u, k, m);
3023
- },
3024
- children: [
3025
- b == null || b === "" ? /* @__PURE__ */ p("option", { value: "", disabled: s, selected: !0, children: l }) : null,
3026
- h.map((m) => {
3027
- if (m == null || !Object.hasOwn(m, "value"))
3028
- throw new TypeError("Dropdown options require value and label fields");
3029
- return /* @__PURE__ */ p(
3030
- "option",
3031
- {
3032
- value: String(m.value),
3033
- disabled: !!m.disabled,
3034
- selected: Object.is(b, m.value),
3035
- children: m.label ?? String(m.value)
3036
- },
3037
- String(m.value)
3038
- );
3039
- })
3040
- ]
3041
- }
3042
- )
3043
- ),
3044
- n == null ? null : /* @__PURE__ */ p(
3215
+ e == null ? null : /* @__PURE__ */ h("label", { htmlFor: this.inputId, children: e }),
3216
+ /* @__PURE__ */ h("fray-selectshell", { children: /* @__PURE__ */ y(
3217
+ "select",
3218
+ {
3219
+ id: this.inputId,
3220
+ name: i,
3221
+ value: b == null ? "" : String(b),
3222
+ disabled: o,
3223
+ required: s,
3224
+ "aria-label": e == null ? c : null,
3225
+ "aria-invalid": n == null ? null : "true",
3226
+ "aria-describedby": n == null ? null : this.errorId,
3227
+ onChange: (m) => {
3228
+ const R = Jr(m, "dropdown change"), T = p.find(({ value: $ }) => String($) === R), x = (T == null ? void 0 : T.value) ?? R;
3229
+ this.valueEmitter.set(x, "dropdown selection"), z(u, x, m);
3230
+ },
3231
+ children: [
3232
+ b == null || b === "" ? /* @__PURE__ */ h("option", { value: "", disabled: s, selected: !0, children: l }) : null,
3233
+ p.map((m) => {
3234
+ if (m == null || !Object.hasOwn(m, "value"))
3235
+ throw new TypeError("Dropdown options require value and label fields");
3236
+ return /* @__PURE__ */ h(
3237
+ "option",
3238
+ {
3239
+ value: String(m.value),
3240
+ disabled: !!m.disabled,
3241
+ selected: Object.is(b, m.value),
3242
+ children: m.label ?? String(m.value)
3243
+ },
3244
+ String(m.value)
3245
+ );
3246
+ })
3247
+ ]
3248
+ }
3249
+ ) }),
3250
+ n == null ? null : /* @__PURE__ */ h(
3045
3251
  "p",
3046
3252
  {
3047
3253
  id: this.errorId,
@@ -3054,24 +3260,24 @@ class Oe extends nt {
3054
3260
  );
3055
3261
  }
3056
3262
  }
3057
- a(Oe, "liveProps", Mr), a(Oe, "hostName", "dropdown"), a(Oe, "css", "");
3058
- function Hr(t) {
3263
+ a(Ae, "liveProps", Gr), a(Ae, "hostName", "dropdown"), a(Ae, "css", "");
3264
+ function Yr(t) {
3059
3265
  return t != null && (typeof t == "object" || typeof t == "function") && typeof Reflect.get(t, "get") == "function" && typeof Reflect.get(t, "subscribe") == "function";
3060
3266
  }
3061
- function Vr(t, r) {
3267
+ function Jr(t, r) {
3062
3268
  const e = t.currentTarget;
3063
3269
  if (e == null || typeof Reflect.get(e, "value") != "string")
3064
3270
  throw new TypeError(`${r} requires a value-bearing event target`);
3065
3271
  return Reflect.get(e, "value");
3066
3272
  }
3067
- const Ur = ["text"];
3068
- class _r extends g {
3273
+ const Zr = ["text"];
3274
+ class Xr extends g {
3069
3275
  render() {
3070
3276
  const { text: r, htmlFor: e, children: i } = this.props;
3071
- return /* @__PURE__ */ p(
3277
+ return /* @__PURE__ */ h(
3072
3278
  "label",
3073
3279
  {
3074
- className: x(this.props) || void 0,
3280
+ className: E(this.props) || void 0,
3075
3281
  htmlFor: e,
3076
3282
  "data-fray-component": "label",
3077
3283
  children: r ?? i
@@ -3079,14 +3285,14 @@ class _r extends g {
3079
3285
  );
3080
3286
  }
3081
3287
  }
3082
- a(_r, "liveProps", Ur);
3083
- const Qr = ["checked", "disabled", "required", "error"], Br = ["disabled", "required", "error"];
3084
- class oe extends et {
3288
+ a(Xr, "liveProps", Zr);
3289
+ const ei = ["checked", "disabled", "required", "error"], ti = ["disabled", "required", "error"];
3290
+ class oe extends tt {
3085
3291
  constructor(e = {}) {
3086
3292
  super(e);
3087
3293
  a(this, "inputId");
3088
3294
  a(this, "errorId");
3089
- this.inputId = R("radio", e.id), this.errorId = `${this.inputId}-error`;
3295
+ this.inputId = I("radio", e.id), this.errorId = `${this.inputId}-error`;
3090
3296
  }
3091
3297
  render() {
3092
3298
  const {
@@ -3096,9 +3302,9 @@ class oe extends et {
3096
3302
  required: s = !1,
3097
3303
  error: n = null
3098
3304
  } = this.props, l = this.Host;
3099
- return /* @__PURE__ */ v(l, { className: x(this.props) || null, children: [
3100
- /* @__PURE__ */ v("label", { htmlFor: this.inputId, children: [
3101
- /* @__PURE__ */ p(
3305
+ return /* @__PURE__ */ y(l, { className: E(this.props) || null, children: [
3306
+ /* @__PURE__ */ y("label", { htmlFor: this.inputId, children: [
3307
+ /* @__PURE__ */ h(
3102
3308
  "input",
3103
3309
  {
3104
3310
  id: this.inputId,
@@ -3110,21 +3316,21 @@ class oe extends et {
3110
3316
  required: s,
3111
3317
  "aria-invalid": n == null ? null : "true",
3112
3318
  "aria-describedby": n == null ? null : this.errorId,
3113
- onChange: (c) => $(
3319
+ onChange: (c) => z(
3114
3320
  this.props.onChange,
3115
3321
  c.currentTarget.checked,
3116
3322
  c
3117
3323
  )
3118
3324
  }
3119
3325
  ),
3120
- w("fray-checkshell", { "aria-hidden": "true" }),
3326
+ /* @__PURE__ */ h("fray-checkshell", { "aria-hidden": "true" }),
3121
3327
  e
3122
3328
  ] }),
3123
- n == null ? null : /* @__PURE__ */ p("p", { id: this.errorId, role: "alert", children: String(n) })
3329
+ n == null ? null : /* @__PURE__ */ h("p", { id: this.errorId, role: "alert", children: String(n) })
3124
3330
  ] });
3125
3331
  }
3126
3332
  }
3127
- a(oe, "liveProps", Qr), a(oe, "hostName", "radio-button"), a(oe, "css", E`
3333
+ a(oe, "liveProps", ei), a(oe, "hostName", "radio-button"), a(oe, "css", w`
3128
3334
  & > label > input[type="radio"] + fray-checkshell {
3129
3335
  border-radius: 50%;
3130
3336
  }
@@ -3145,30 +3351,30 @@ class me extends g {
3145
3351
  a(this, "groupId");
3146
3352
  a(this, "errorId");
3147
3353
  const i = e.options ?? [];
3148
- Ae(i);
3354
+ je(i);
3149
3355
  const o = ((s = i[0]) == null ? void 0 : s[0]) ?? null;
3150
- this.valueEmitter = F(this, e, o, "radio group value"), this.groupId = R("radio-group", e.id), this.errorId = `${this.groupId}-error`;
3356
+ this.valueEmitter = L(this, e, o, "radio group value"), this.groupId = I("radio-group", e.id), this.errorId = `${this.groupId}-error`;
3151
3357
  }
3152
3358
  initialize() {
3153
3359
  this.watch(this.valueEmitter);
3154
3360
  }
3155
3361
  setProps(e) {
3156
3362
  const i = e.options ?? [];
3157
- return Ae(i), super.setProps(e), this.selectFirstAvailableOption(i), this;
3363
+ return je(i), super.setProps(e), this.selectFirstAvailableOption(i), this;
3158
3364
  }
3159
3365
  selectOption(e, i = null) {
3160
- this.props.disabled || (this.valueEmitter.set(e, "radio option selected"), $(this.props.onChange, e, i));
3366
+ this.props.disabled || (this.valueEmitter.set(e, "radio option selected"), z(this.props.onChange, e, i));
3161
3367
  }
3162
3368
  render() {
3163
3369
  const { options: e = [], label: i, disabled: o = !1, required: s = !1, error: n = null } = this.props;
3164
- Ae(e);
3370
+ je(e);
3165
3371
  const l = this.valueEmitter.get(), c = this.Host;
3166
- return /* @__PURE__ */ v(
3372
+ return /* @__PURE__ */ y(
3167
3373
  c,
3168
3374
  {
3169
- className: x(this.props) || null,
3375
+ className: E(this.props) || null,
3170
3376
  children: [
3171
- /* @__PURE__ */ v(
3377
+ /* @__PURE__ */ y(
3172
3378
  "fieldset",
3173
3379
  {
3174
3380
  id: this.groupId,
@@ -3178,14 +3384,14 @@ class me extends g {
3178
3384
  "aria-invalid": n == null ? null : "true",
3179
3385
  "aria-describedby": n == null ? null : this.errorId,
3180
3386
  children: [
3181
- i == null ? null : /* @__PURE__ */ p("legend", { children: i }),
3182
- e.map(([u, h], b) => /* @__PURE__ */ p(
3387
+ i == null ? null : /* @__PURE__ */ h("legend", { children: i }),
3388
+ e.map(([u, p], b) => /* @__PURE__ */ h(
3183
3389
  oe,
3184
3390
  {
3185
3391
  id: `${this.groupId}-${b}`,
3186
3392
  name: this.props.name ?? this.groupId,
3187
3393
  value: u,
3188
- label: h,
3394
+ label: p,
3189
3395
  checked: Object.is(l, u),
3190
3396
  disabled: o,
3191
3397
  required: s,
@@ -3198,7 +3404,7 @@ class me extends g {
3198
3404
  ]
3199
3405
  }
3200
3406
  ),
3201
- n == null ? null : /* @__PURE__ */ p("p", { id: this.errorId, role: "alert", children: String(n) })
3407
+ n == null ? null : /* @__PURE__ */ h("p", { id: this.errorId, role: "alert", children: String(n) })
3202
3408
  ]
3203
3409
  }
3204
3410
  );
@@ -3211,11 +3417,11 @@ class me extends g {
3211
3417
  );
3212
3418
  }
3213
3419
  }
3214
- a(me, "dependencies", [oe]), a(me, "liveProps", Br), a(me, "hostName", "radio-group"), a(me, "css", E`
3420
+ a(me, "dependencies", [oe]), a(me, "liveProps", ti), a(me, "hostName", "radio-group"), a(me, "css", w`
3215
3421
  & > fieldset {
3216
3422
  display: flex;
3217
- flex-flow: row wrap;
3218
- gap: var(--space-sm, 0.5rem);
3423
+ flex-flow: column wrap;
3424
+ gap: 0;
3219
3425
  margin: 0;
3220
3426
  padding: 0;
3221
3427
  min-inline-size: 0;
@@ -3226,22 +3432,24 @@ a(me, "dependencies", [oe]), a(me, "liveProps", Br), a(me, "hostName", "radio-gr
3226
3432
  & > fieldset > legend {
3227
3433
  flex: 0 0 100%;
3228
3434
  padding: 0;
3435
+ margin-bottom: .5em;
3436
+ border-bottom: 1px solid #aaa;
3229
3437
  }
3230
3438
  `);
3231
- function Ae(t) {
3439
+ function je(t) {
3232
3440
  ve(t, "Radio group options");
3233
3441
  for (const r of t)
3234
3442
  if (!Array.isArray(r) || r.length < 2)
3235
3443
  throw new TypeError("Radio group options must be [value, label] tuples");
3236
3444
  }
3237
- const Wr = ["disabled", "required", "readOnly", "error"];
3238
- class je extends st {
3445
+ const ri = ["disabled", "required", "readOnly", "error"];
3446
+ class qe extends nt {
3239
3447
  constructor(e = {}) {
3240
3448
  super(e);
3241
3449
  a(this, "inputId");
3242
3450
  a(this, "errorId");
3243
3451
  a(this, "valueEmitter");
3244
- this.inputId = R("textbox", e.id), this.errorId = `${this.inputId}-error`, this.valueEmitter = F(this, e, "", "textbox value");
3452
+ this.inputId = I("textbox", e.id), this.errorId = `${this.inputId}-error`, this.valueEmitter = L(this, e, "", "textbox value");
3245
3453
  }
3246
3454
  initialize() {
3247
3455
  this.watch(this.valueEmitter);
@@ -3256,50 +3464,50 @@ class je extends st {
3256
3464
  required: l = !1,
3257
3465
  readOnly: c = !1,
3258
3466
  error: u = null,
3259
- autoComplete: h,
3467
+ autoComplete: p,
3260
3468
  inputMode: b,
3261
3469
  minLength: f,
3262
3470
  maxLength: m,
3263
- pattern: C,
3471
+ pattern: R,
3264
3472
  ariaLabel: T,
3265
- inputRef: k,
3266
- onInput: O,
3267
- onChange: P
3268
- } = this.props, K = this.valueEmitter.get() ?? "", M = this.Host;
3269
- return /* @__PURE__ */ v(M, { className: x(this.props) || null, children: [
3270
- e == null ? null : /* @__PURE__ */ p("label", { htmlFor: this.inputId, children: e }),
3271
- /* @__PURE__ */ p(
3473
+ inputRef: x,
3474
+ onInput: $,
3475
+ onChange: D
3476
+ } = this.props, P = this.valueEmitter.get() ?? "", K = this.Host;
3477
+ return /* @__PURE__ */ y(K, { className: E(this.props) || null, children: [
3478
+ e == null ? null : /* @__PURE__ */ h("label", { htmlFor: this.inputId, children: e }),
3479
+ /* @__PURE__ */ h(
3272
3480
  "input",
3273
3481
  {
3274
3482
  id: this.inputId,
3275
3483
  name: s,
3276
3484
  type: o,
3277
- value: K,
3485
+ value: P,
3278
3486
  placeholder: i,
3279
3487
  disabled: n,
3280
3488
  required: l,
3281
3489
  readOnly: c,
3282
- autoComplete: h,
3490
+ autoComplete: p,
3283
3491
  inputMode: b,
3284
3492
  minLength: f,
3285
3493
  maxLength: m,
3286
- pattern: C,
3287
- ref: k,
3494
+ pattern: R,
3495
+ ref: x,
3288
3496
  "aria-label": e == null ? T : null,
3289
3497
  "aria-invalid": u == null ? null : "true",
3290
3498
  "aria-describedby": u == null ? null : this.errorId,
3291
- onInput: (z) => {
3292
- const N = Tt(z, "textbox input");
3293
- this.valueEmitter.set(N, "textbox input"), $(O, N, z);
3499
+ onInput: (C) => {
3500
+ const q = zt(C, "textbox input");
3501
+ this.valueEmitter.set(q, "textbox input"), z($, q, C);
3294
3502
  },
3295
- onChange: (z) => $(
3296
- P,
3297
- Tt(z, "textbox change"),
3298
- z
3503
+ onChange: (C) => z(
3504
+ D,
3505
+ zt(C, "textbox change"),
3506
+ C
3299
3507
  )
3300
3508
  }
3301
3509
  ),
3302
- u == null ? null : /* @__PURE__ */ p(
3510
+ u == null ? null : /* @__PURE__ */ h(
3303
3511
  "p",
3304
3512
  {
3305
3513
  id: this.errorId,
@@ -3310,7 +3518,7 @@ class je extends st {
3310
3518
  ] });
3311
3519
  }
3312
3520
  }
3313
- a(je, "liveProps", Wr), a(je, "hostName", "textbox"), a(je, "css", E`
3521
+ a(qe, "liveProps", ri), a(qe, "hostName", "textbox"), a(qe, "css", w`
3314
3522
  & > input {
3315
3523
  min-height: var(--control-min-height, 2rem);
3316
3524
  width: var(--input-width, 15rem);
@@ -3345,14 +3553,14 @@ a(je, "liveProps", Wr), a(je, "hostName", "textbox"), a(je, "css", E`
3345
3553
  margin: 0;
3346
3554
  }
3347
3555
  `);
3348
- function Tt(t, r) {
3556
+ function zt(t, r) {
3349
3557
  const e = t.currentTarget;
3350
3558
  if (e == null || typeof Reflect.get(e, "value") != "string")
3351
3559
  throw new TypeError(`${r} requires a value-bearing event target`);
3352
3560
  return Reflect.get(e, "value");
3353
3561
  }
3354
- const Gr = ["disabled", "required", "error"];
3355
- class qe extends g {
3562
+ const ii = ["disabled", "required", "error"];
3563
+ class Ne extends g {
3356
3564
  constructor(e = {}) {
3357
3565
  var s;
3358
3566
  super(e);
@@ -3361,24 +3569,24 @@ class qe extends g {
3361
3569
  a(this, "legendId");
3362
3570
  a(this, "errorId");
3363
3571
  const i = e.options ?? [];
3364
- Ne(i);
3572
+ Le(i);
3365
3573
  const o = ((s = i[0]) == null ? void 0 : s[0]) ?? null;
3366
- this.valueEmitter = F(
3574
+ this.valueEmitter = L(
3367
3575
  this,
3368
3576
  e,
3369
3577
  o ?? null,
3370
3578
  "toggle value"
3371
- ), this.groupId = R("toggle", e.id), this.legendId = `${this.groupId}-label`, this.errorId = `${this.groupId}-error`;
3579
+ ), this.groupId = I("toggle", e.id), this.legendId = `${this.groupId}-label`, this.errorId = `${this.groupId}-error`;
3372
3580
  }
3373
3581
  initialize() {
3374
3582
  this.selectFirstAvailableOption(this.props.options ?? []), this.watch(this.valueEmitter);
3375
3583
  }
3376
3584
  setProps(e) {
3377
3585
  const i = e.options ?? [];
3378
- return Ne(i), super.setProps(e), this.selectFirstAvailableOption(i), this;
3586
+ return Le(i), super.setProps(e), this.selectFirstAvailableOption(i), this;
3379
3587
  }
3380
3588
  selectOption(e, i = null) {
3381
- this.props.disabled || (this.valueEmitter.set(e, "toggle option selected"), $(this.props.onChange, e, i));
3589
+ this.props.disabled || (this.valueEmitter.set(e, "toggle option selected"), z(this.props.onChange, e, i));
3382
3590
  }
3383
3591
  render() {
3384
3592
  const {
@@ -3388,38 +3596,46 @@ class qe extends g {
3388
3596
  required: s = !1,
3389
3597
  error: n = null
3390
3598
  } = this.props;
3391
- Ne(e);
3599
+ Le(e);
3392
3600
  const l = this.valueEmitter.get(), c = Math.max(
3393
3601
  0,
3394
- e.findIndex(([h]) => Object.is(h, l))
3602
+ e.findIndex(([p]) => Object.is(p, l))
3395
3603
  ), u = this.Host;
3396
- return /* @__PURE__ */ v(u, { id: this.groupId, className: x(this.props) || null, children: [
3397
- i == null ? null : w("fray-label", { id: this.legendId }, i),
3398
- w("fray-options", {
3399
- role: "radiogroup",
3400
- "aria-label": i == null ? this.props.ariaLabel : null,
3401
- "aria-labelledby": i == null ? null : this.legendId,
3402
- "aria-required": s ? "true" : null,
3403
- "aria-invalid": n == null ? null : "true",
3404
- "aria-describedby": n == null ? null : this.errorId
3405
- }, e.map(([h, b], f) => /* @__PURE__ */ p(
3406
- "button",
3604
+ return /* @__PURE__ */ y(u, { id: this.groupId, className: E(this.props) || null, children: [
3605
+ i == null ? null : /* @__PURE__ */ h("fray-label", { id: this.legendId, children: i }),
3606
+ /* @__PURE__ */ h(
3607
+ "fray-options",
3407
3608
  {
3408
- type: "button",
3409
- role: "radio",
3410
- disabled: o,
3411
- "aria-checked": Object.is(l, h) ? "true" : "false",
3412
- tabIndex: f === c ? 0 : -1,
3413
- onClick: (m) => this.selectOption(h, m),
3414
- onKeyDown: (m) => this.handleKeyDown(m, f, e),
3415
- children: b
3416
- },
3417
- String(h)
3418
- ))),
3419
- n == null ? null : w("fray-error", {
3420
- id: this.errorId,
3421
- role: "alert"
3422
- }, String(n))
3609
+ role: "radiogroup",
3610
+ "aria-label": i == null ? this.props.ariaLabel : null,
3611
+ "aria-labelledby": i == null ? null : this.legendId,
3612
+ "aria-required": s ? "true" : null,
3613
+ "aria-invalid": n == null ? null : "true",
3614
+ "aria-describedby": n == null ? null : this.errorId,
3615
+ children: e.map(([p, b], f) => /* @__PURE__ */ h(
3616
+ "button",
3617
+ {
3618
+ type: "button",
3619
+ role: "radio",
3620
+ disabled: o,
3621
+ "aria-checked": Object.is(l, p) ? "true" : "false",
3622
+ tabIndex: f === c ? 0 : -1,
3623
+ onClick: (m) => this.selectOption(p, m),
3624
+ onKeyDown: (m) => this.handleKeyDown(m, f, e),
3625
+ children: b
3626
+ },
3627
+ String(p)
3628
+ ))
3629
+ }
3630
+ ),
3631
+ n == null ? null : /* @__PURE__ */ h(
3632
+ "fray-error",
3633
+ {
3634
+ id: this.errorId,
3635
+ role: "alert",
3636
+ children: String(n)
3637
+ }
3638
+ )
3423
3639
  ] });
3424
3640
  }
3425
3641
  handleKeyDown(e, i, o) {
@@ -3446,7 +3662,7 @@ class qe extends g {
3446
3662
  );
3447
3663
  }
3448
3664
  }
3449
- a(qe, "liveProps", Gr), a(qe, "hostName", "toggle"), a(qe, "css", E`
3665
+ a(Ne, "liveProps", ii), a(Ne, "hostName", "toggle"), a(Ne, "css", w`
3450
3666
  & {
3451
3667
  display: inline-block;
3452
3668
  inline-size: fit-content;
@@ -3540,13 +3756,13 @@ a(qe, "liveProps", Gr), a(qe, "hostName", "toggle"), a(qe, "css", E`
3540
3756
  background: var(--toggle-inactive-separator-background);
3541
3757
  }
3542
3758
  `);
3543
- function Ne(t) {
3759
+ function Le(t) {
3544
3760
  ve(t);
3545
3761
  for (const r of t)
3546
3762
  if (!Array.isArray(r) || r.length < 2)
3547
3763
  throw new TypeError("Toggle options must be [value, label] tuples");
3548
3764
  }
3549
- class Le extends g {
3765
+ class Fe extends g {
3550
3766
  render() {
3551
3767
  const {
3552
3768
  children: r = [],
@@ -3557,12 +3773,12 @@ class Le extends g {
3557
3773
  if (!["horizontal", "vertical"].includes(o))
3558
3774
  throw new TypeError("Toolbar orientation must be horizontal or vertical");
3559
3775
  const s = this.Host;
3560
- return /* @__PURE__ */ p(
3776
+ return /* @__PURE__ */ h(
3561
3777
  s,
3562
3778
  {
3563
3779
  id: e,
3564
3780
  role: "toolbar",
3565
- className: x(this.props) || null,
3781
+ className: E(this.props) || null,
3566
3782
  "aria-label": i,
3567
3783
  "aria-orientation": o,
3568
3784
  children: r
@@ -3570,7 +3786,7 @@ class Le extends g {
3570
3786
  );
3571
3787
  }
3572
3788
  }
3573
- a(Le, "liveProps", []), a(Le, "hostName", "toolbar"), a(Le, "css", E`
3789
+ a(Fe, "liveProps", []), a(Fe, "hostName", "toolbar"), a(Fe, "css", w`
3574
3790
  & {
3575
3791
  display: flex;
3576
3792
  flex-wrap: wrap;
@@ -3592,11 +3808,11 @@ a(Le, "liveProps", []), a(Le, "hostName", "toolbar"), a(Le, "css", E`
3592
3808
  align-items: stretch;
3593
3809
  }
3594
3810
  `);
3595
- class Fe extends g {
3811
+ class De extends g {
3596
3812
  constructor(e) {
3597
3813
  super(e);
3598
3814
  a(this, "progressId");
3599
- if (this.progressId = R("progress", e.id), e.valueEmitter != null && !Yr(e.valueEmitter))
3815
+ if (this.progressId = I("progress", e.id), e.valueEmitter != null && !oi(e.valueEmitter))
3600
3816
  throw new TypeError("ProgressBar valueEmitter must be a readable emitter");
3601
3817
  }
3602
3818
  render() {
@@ -3607,9 +3823,9 @@ class Fe extends g {
3607
3823
  if (i != null && (!Number.isFinite(i) || i < 0))
3608
3824
  throw new RangeError("ProgressBar value must be null or a non-negative finite number");
3609
3825
  const o = i == null ? null : Math.min(i, e), s = o == null ? null : o / e * 100, n = this.props.valueText ?? (o == null ? "In progress" : `${Math.round(o / e * 100)}%`), l = this.Host;
3610
- return /* @__PURE__ */ v(l, { className: x(this.props) || null, children: [
3611
- /* @__PURE__ */ p("label", { htmlFor: this.progressId, children: this.props.label }),
3612
- /* @__PURE__ */ p(
3826
+ return /* @__PURE__ */ y(l, { className: E(this.props) || null, children: [
3827
+ /* @__PURE__ */ h("label", { htmlFor: this.progressId, children: this.props.label }),
3828
+ /* @__PURE__ */ h(
3613
3829
  "progress",
3614
3830
  {
3615
3831
  id: this.progressId,
@@ -3619,21 +3835,23 @@ class Fe extends g {
3619
3835
  children: n
3620
3836
  }
3621
3837
  ),
3622
- w(
3623
- "fray-content",
3624
- { "aria-hidden": "true" },
3625
- w("fray-progress", {
3626
- style: s == null ? void 0 : {
3627
- "--progress-width": `${s}%`,
3628
- "--progress-inverse-width": `${1e4 / Math.max(s, 1)}%`
3838
+ /* @__PURE__ */ y("fray-content", { "aria-hidden": "true", children: [
3839
+ /* @__PURE__ */ h(
3840
+ "fray-progress",
3841
+ {
3842
+ style: s == null ? void 0 : {
3843
+ "--progress-width": `${s}%`,
3844
+ "--progress-inverse-width": `${1e4 / Math.max(s, 1)}%`
3845
+ },
3846
+ children: /* @__PURE__ */ h("fray-inverse", { children: this.props.label })
3629
3847
  }
3630
- }, w("fray-inverse", null, this.props.label)),
3631
- w("fray-label", null, this.props.label)
3632
- )
3848
+ ),
3849
+ /* @__PURE__ */ h("fray-label", { children: this.props.label })
3850
+ ] })
3633
3851
  ] });
3634
3852
  }
3635
3853
  }
3636
- a(Fe, "liveProps", []), a(Fe, "hostName", "progress-bar"), a(Fe, "css", E`
3854
+ a(De, "liveProps", []), a(De, "hostName", "progress-bar"), a(De, "css", w`
3637
3855
  & {
3638
3856
  display: block;
3639
3857
  }
@@ -3744,13 +3962,13 @@ a(Fe, "liveProps", []), a(Fe, "hostName", "progress-bar"), a(Fe, "css", E`
3744
3962
  }
3745
3963
  }
3746
3964
  `);
3747
- function Yr(t) {
3965
+ function oi(t) {
3748
3966
  return t != null && (typeof t == "object" || typeof t == "function") && typeof Reflect.get(t, "get") == "function" && typeof Reflect.get(t, "subscribe") == "function";
3749
3967
  }
3750
- const Li = Object.freeze([
3751
- ...De("primary"),
3752
- ...De("secondary"),
3753
- ...De("neutral"),
3968
+ const _i = Object.freeze([
3969
+ ...Pe("primary"),
3970
+ ...Pe("secondary"),
3971
+ ...Pe("neutral"),
3754
3972
  d("--palette-primary", "palette", "primary", "color", "Primary anchor color", "--palette-primary-500"),
3755
3973
  d("--palette-primary-light", "palette", "primary", "color", "Light primary color", "--palette-primary-200"),
3756
3974
  d("--palette-primary-dark", "palette", "primary", "color", "Dark primary color", "--palette-primary-800"),
@@ -3873,35 +4091,35 @@ const Li = Object.freeze([
3873
4091
  d("--block-graph-block-border", "theme", "block graph", "border", "Block graph category border", "--ui-border"),
3874
4092
  d("--block-graph-block-radius", "theme", "block graph", "radius", "Block graph category radius", "--radius-sm"),
3875
4093
  d("--block-graph-block-shadow", "theme", "block graph", "shadow", "Block graph category depth")
3876
- ]), Jr = Object.freeze([
3877
- Pe("shiny", "Shiny", A("themes/shiny/theme.css"), "light"),
3878
- Pe("java", "Java", A("themes/java/theme.css"), "light"),
3879
- Pe("minimal", "Minimal", A("themes/minimal/theme.css"), "adaptive")
3880
- ]), Zr = Object.freeze([
3881
- D("iceblue", "Ice blue", A("colors/iceblue/colors.css")),
3882
- D("ocean", "Ocean", A("colors/ocean/colors.css")),
3883
- D("green", "Green", A("colors/green/colors.css")),
3884
- D("gray", "Gray", A("colors/gray/colors.css")),
3885
- D("orange", "Orange", A("colors/orange/colors.css")),
3886
- D("purple", "Purple", A("colors/purple/colors.css")),
3887
- D("red", "Red", A("colors/red/colors.css")),
3888
- D("yellow", "Yellow", A("colors/yellow/colors.css"))
4094
+ ]), si = Object.freeze([
4095
+ Ke("shiny", "Shiny", O("themes/shiny/theme.css"), "light"),
4096
+ Ke("java", "Java", O("themes/java/theme.css"), "light"),
4097
+ Ke("minimal", "Minimal", O("themes/minimal/theme.css"), "adaptive")
4098
+ ]), ni = Object.freeze([
4099
+ F("iceblue", "Ice blue", O("colors/iceblue/colors.css")),
4100
+ F("ocean", "Ocean", O("colors/ocean/colors.css")),
4101
+ F("green", "Green", O("colors/green/colors.css")),
4102
+ F("gray", "Gray", O("colors/gray/colors.css")),
4103
+ F("orange", "Orange", O("colors/orange/colors.css")),
4104
+ F("purple", "Purple", O("colors/purple/colors.css")),
4105
+ F("red", "Red", O("colors/red/colors.css")),
4106
+ F("yellow", "Yellow", O("colors/yellow/colors.css"))
3889
4107
  ]);
3890
- function Xr(t, r, e = globalThis.document) {
3891
- if (ei(r), (e == null ? void 0 : e.head) == null || e.documentElement == null)
4108
+ function ai(t, r, e = globalThis.document) {
4109
+ if (li(r), (e == null ? void 0 : e.head) == null || e.documentElement == null)
3892
4110
  throw new TypeError("replaceFrayStylesheet requires a document with a head and root");
3893
4111
  const i = `link[data-fray-stylesheet="${t}"]`;
3894
4112
  let o = e.head.querySelector(i);
3895
4113
  return o == null && (o = e.createElement("link"), o.rel = "stylesheet", o.dataset.frayStylesheet = t, e.head.append(o)), o.dataset.fraySelection = r.value, o.getAttribute("href") !== r.href && o.setAttribute("href", r.href), t === "theme" ? e.documentElement.dataset.theme = r.value : e.documentElement.dataset.color = r.value, o;
3896
4114
  }
3897
- function Fi(t, r = globalThis.document) {
4115
+ function Qi(t, r = globalThis.document) {
3898
4116
  if ((r == null ? void 0 : r.documentElement) == null)
3899
4117
  throw new TypeError("setFrayAppearance requires a document with a root");
3900
4118
  if (t !== "light" && t !== "dark" && t !== "system")
3901
4119
  throw new TypeError("Fray appearance must be light, dark, or system");
3902
4120
  t === "system" ? r.documentElement.removeAttribute("data-appearance") : r.documentElement.dataset.appearance = t;
3903
4121
  }
3904
- function Di(t = globalThis.document) {
4122
+ function Bi(t = globalThis.document) {
3905
4123
  if ((t == null ? void 0 : t.documentElement) == null)
3906
4124
  throw new TypeError("getFrayAppearance requires a document with a root");
3907
4125
  const r = t.documentElement.dataset.appearance;
@@ -3915,7 +4133,7 @@ function be(t, r) {
3915
4133
  function d(t, r, e, i, o, s) {
3916
4134
  return s == null ? Object.freeze({ name: t, layer: r, family: e, value: i, description: o }) : Object.freeze({ name: t, layer: r, family: e, value: i, description: o, fallback: s });
3917
4135
  }
3918
- function De(t) {
4136
+ function Pe(t) {
3919
4137
  return [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950].map((r) => {
3920
4138
  var e;
3921
4139
  return d(
@@ -3927,25 +4145,25 @@ function De(t) {
3927
4145
  );
3928
4146
  });
3929
4147
  }
3930
- function D(t, r, e) {
4148
+ function F(t, r, e) {
3931
4149
  return Object.freeze({ value: t, label: r, href: e });
3932
4150
  }
3933
- function Pe(t, r, e, i) {
4151
+ function Ke(t, r, e, i) {
3934
4152
  return Object.freeze({ value: t, label: r, href: e, appearance: i });
3935
4153
  }
3936
- function A(t) {
4154
+ function O(t) {
3937
4155
  const r = import.meta.url.includes("/src/styling/") ? `../../${t}` : `../${t}`;
3938
4156
  return new URL(r, import.meta.url).href;
3939
4157
  }
3940
- function ei(t) {
4158
+ function li(t) {
3941
4159
  if (t == null || typeof t != "object")
3942
4160
  throw new TypeError("Fray stylesheet selection must be an option");
3943
4161
  for (const r of ["value", "label", "href"])
3944
4162
  if (typeof Reflect.get(t, r) != "string" || String(Reflect.get(t, r)).length === 0)
3945
4163
  throw new TypeError(`Fray stylesheet option ${r} must be a non-empty string`);
3946
4164
  }
3947
- const ti = ["disabled"];
3948
- class ke extends nt {
4165
+ const ci = ["disabled"];
4166
+ class ke extends at {
3949
4167
  constructor(e, i, o) {
3950
4168
  var l;
3951
4169
  super(e);
@@ -3954,48 +4172,44 @@ class ke extends nt {
3954
4172
  a(this, "kind");
3955
4173
  a(this, "defaults");
3956
4174
  const s = e.options ?? o;
3957
- Rt(s);
4175
+ $t(s);
3958
4176
  const n = (l = s[0]) == null ? void 0 : l.value;
3959
4177
  if (n == null) throw new TypeError(`${i} picker requires at least one option`);
3960
- this.kind = i, this.defaults = o, this.inputId = R(`${i}-picker`, e.id), this.valueEmitter = F(this, e, n, `${i} selection`), be(s, this.valueEmitter.get());
4178
+ this.kind = i, this.defaults = o, this.inputId = I(`${i}-picker`, e.id), this.valueEmitter = L(this, e, n, `${i} selection`), be(s, this.valueEmitter.get());
3961
4179
  }
3962
4180
  initialize() {
3963
4181
  this.watch(this.valueEmitter);
3964
4182
  }
3965
4183
  render() {
3966
4184
  const e = this.options, i = be(e, this.valueEmitter.get()), { label: o, ariaLabel: s, disabled: n = !1, onChange: l } = this.props, c = this.Host;
3967
- return /* @__PURE__ */ v(
4185
+ return /* @__PURE__ */ y(
3968
4186
  c,
3969
4187
  {
3970
- className: x(this.props),
4188
+ className: E(this.props),
3971
4189
  children: [
3972
- o == null ? null : /* @__PURE__ */ p("label", { htmlFor: this.inputId, children: o }),
3973
- w(
3974
- "fray-selectshell",
3975
- null,
3976
- /* @__PURE__ */ p(
3977
- "select",
3978
- {
3979
- id: this.inputId,
3980
- value: i.value,
3981
- disabled: n,
3982
- "aria-label": o == null ? s : null,
3983
- onChange: (u) => {
3984
- const h = oi(u), b = be(e, h);
3985
- this.valueEmitter.set(h, `${this.kind} selected`), $(l, h, b, u);
4190
+ o == null ? null : /* @__PURE__ */ h("label", { htmlFor: this.inputId, children: o }),
4191
+ /* @__PURE__ */ h("fray-selectshell", { children: /* @__PURE__ */ h(
4192
+ "select",
4193
+ {
4194
+ id: this.inputId,
4195
+ value: i.value,
4196
+ disabled: n,
4197
+ "aria-label": o == null ? s : null,
4198
+ onChange: (u) => {
4199
+ const p = hi(u), b = be(e, p);
4200
+ this.valueEmitter.set(p, `${this.kind} selected`), z(l, p, b, u);
4201
+ },
4202
+ children: e.map((u) => /* @__PURE__ */ h(
4203
+ "option",
4204
+ {
4205
+ value: u.value,
4206
+ selected: u.value === i.value,
4207
+ children: u.label
3986
4208
  },
3987
- children: e.map((u) => /* @__PURE__ */ p(
3988
- "option",
3989
- {
3990
- value: u.value,
3991
- selected: u.value === i.value,
3992
- children: u.label
3993
- },
3994
- u.value
3995
- ))
3996
- }
3997
- )
3998
- )
4209
+ u.value
4210
+ ))
4211
+ }
4212
+ ) })
3999
4213
  ]
4000
4214
  }
4001
4215
  );
@@ -4008,35 +4222,35 @@ class ke extends nt {
4008
4222
  }
4009
4223
  get options() {
4010
4224
  const e = this.props.options ?? this.defaults;
4011
- return Rt(e), e;
4225
+ return $t(e), e;
4012
4226
  }
4013
4227
  applySelection() {
4014
4228
  const e = this.props.targetDocument ?? (typeof document > "u" ? null : document);
4015
- e != null && Xr(
4229
+ e != null && ai(
4016
4230
  this.kind,
4017
4231
  be(this.options, this.valueEmitter.get()),
4018
4232
  e
4019
4233
  );
4020
4234
  }
4021
4235
  }
4022
- a(ke, "liveProps", ti), a(ke, "css", E`
4236
+ a(ke, "liveProps", ci), a(ke, "css", w`
4023
4237
  & > fray-selectshell > select {
4024
4238
  min-width: 8rem;
4025
4239
  }
4026
4240
  `);
4027
- class ri extends ke {
4241
+ class di extends ke {
4028
4242
  constructor(r = {}) {
4029
- super(r, "theme", Jr);
4243
+ super(r, "theme", si);
4030
4244
  }
4031
4245
  }
4032
- a(ri, "hostName", "theme-picker");
4033
- class ii extends ke {
4246
+ a(di, "hostName", "theme-picker");
4247
+ class ui extends ke {
4034
4248
  constructor(r = {}) {
4035
- super(r, "colors", Zr);
4249
+ super(r, "colors", ni);
4036
4250
  }
4037
4251
  }
4038
- a(ii, "hostName", "color-picker");
4039
- function Rt(t) {
4252
+ a(ui, "hostName", "color-picker");
4253
+ function $t(t) {
4040
4254
  if (!Array.isArray(t) || t.length === 0)
4041
4255
  throw new TypeError("Stylesheet picker options must be a non-empty array");
4042
4256
  const r = /* @__PURE__ */ new Set();
@@ -4051,30 +4265,30 @@ function Rt(t) {
4051
4265
  r.add(e.value);
4052
4266
  }
4053
4267
  }
4054
- function oi(t) {
4268
+ function hi(t) {
4055
4269
  const r = t.currentTarget == null ? null : Reflect.get(t.currentTarget, "value");
4056
4270
  if (typeof r != "string")
4057
4271
  throw new TypeError("Stylesheet picker change requires a select element");
4058
4272
  return r;
4059
4273
  }
4060
- class Pi {
4274
+ class Wi {
4061
4275
  constructor(r = "/") {
4062
4276
  a(this, "listeners", /* @__PURE__ */ new Set());
4063
4277
  a(this, "entries");
4064
4278
  a(this, "index", 0);
4065
- this.entries = [q(r)];
4279
+ this.entries = [j(r)];
4066
4280
  }
4067
4281
  read() {
4068
4282
  return this.entries[this.index] ?? "/";
4069
4283
  }
4070
4284
  href(r) {
4071
- return q(r);
4285
+ return j(r);
4072
4286
  }
4073
4287
  push(r) {
4074
- this.entries = this.entries.slice(0, this.index + 1), this.entries.push(q(r)), this.index += 1;
4288
+ this.entries = this.entries.slice(0, this.index + 1), this.entries.push(j(r)), this.index += 1;
4075
4289
  }
4076
4290
  replace(r) {
4077
- this.entries[this.index] = q(r);
4291
+ this.entries[this.index] = j(r);
4078
4292
  }
4079
4293
  subscribe(r) {
4080
4294
  if (typeof r != "function")
@@ -4098,16 +4312,16 @@ class Pi {
4098
4312
  for (const r of [...this.listeners]) r();
4099
4313
  }
4100
4314
  }
4101
- function Ki(t = globalThis.window, r = {}) {
4102
- Pt(t);
4103
- const e = si(r.basePath ?? "/");
4315
+ function Gi(t = globalThis.window, r = {}) {
4316
+ Vt(t);
4317
+ const e = pi(r.basePath ?? "/");
4104
4318
  return {
4105
4319
  read() {
4106
4320
  const i = t.location.pathname, o = i === e.slice(0, -1) ? "/" : i.startsWith(e) ? `/${i.slice(e.length)}` : i;
4107
- return q(`${o}${t.location.search}`);
4321
+ return j(`${o}${t.location.search}`);
4108
4322
  },
4109
4323
  href(i) {
4110
- const o = q(i);
4324
+ const o = j(i);
4111
4325
  return `${e}${o.slice(1)}`;
4112
4326
  },
4113
4327
  push(i) {
@@ -4121,13 +4335,13 @@ function Ki(t = globalThis.window, r = {}) {
4121
4335
  }
4122
4336
  };
4123
4337
  }
4124
- function Mi(t = globalThis.window) {
4125
- return Pt(t), {
4338
+ function Yi(t = globalThis.window) {
4339
+ return Vt(t), {
4126
4340
  read() {
4127
- return q(t.location.hash.slice(1) || "/");
4341
+ return j(t.location.hash.slice(1) || "/");
4128
4342
  },
4129
4343
  href(r) {
4130
- return `#${q(r)}`;
4344
+ return `#${j(r)}`;
4131
4345
  },
4132
4346
  push(r) {
4133
4347
  t.history.pushState(null, "", this.href(r));
@@ -4147,41 +4361,41 @@ function Mi(t = globalThis.window) {
4147
4361
  }
4148
4362
  };
4149
4363
  }
4150
- function q(t) {
4364
+ function j(t) {
4151
4365
  if (typeof t != "string") throw new TypeError("Route location must be a string");
4152
4366
  const r = t.indexOf("#"), e = r < 0 ? t : t.slice(0, r), i = e.indexOf("?"), o = i < 0 ? e : e.slice(0, i), s = i < 0 ? "" : e.slice(i);
4153
4367
  return `${(o.startsWith("/") ? o : `/${o}`).replace(/\/{2,}/g, "/").replace(/\/$/, "") || "/"}${s}`;
4154
4368
  }
4155
- function si(t) {
4156
- const r = q(t).split("?")[0] ?? "/";
4369
+ function pi(t) {
4370
+ const r = j(t).split("?")[0] ?? "/";
4157
4371
  return r === "/" ? "/" : `${r}/`;
4158
4372
  }
4159
- function Pt(t) {
4373
+ function Vt(t) {
4160
4374
  if (t == null || typeof t != "object" || !("location" in t) || !("history" in t) || !("addEventListener" in t))
4161
4375
  throw new TypeError("Browser navigation requires a window-like target");
4162
4376
  }
4163
- const at = /* @__PURE__ */ new WeakSet(), lt = /* @__PURE__ */ new WeakSet();
4164
- class We {
4377
+ const lt = /* @__PURE__ */ new WeakSet(), ct = /* @__PURE__ */ new WeakSet();
4378
+ class Ge {
4165
4379
  constructor(r) {
4166
4380
  this.target = r, Ce(r), Object.freeze(this);
4167
4381
  }
4168
4382
  }
4169
- class ct extends Error {
4383
+ class dt extends Error {
4170
4384
  constructor(e = "The requested route is unavailable") {
4171
4385
  super(e);
4172
4386
  a(this, "name", "RouteUnavailableError");
4173
4387
  }
4174
4388
  }
4175
- const Hi = Object.freeze({
4389
+ const Ji = Object.freeze({
4176
4390
  parse: (t) => t,
4177
4391
  format: (t) => t
4178
- }), Vi = Object.freeze({
4392
+ }), Zi = Object.freeze({
4179
4393
  parse(t) {
4180
4394
  if (t.length !== 1) throw new TypeError("Expected one query value");
4181
4395
  return t[0] ?? "";
4182
4396
  },
4183
4397
  format: (t) => [t]
4184
- }), Ui = Object.freeze({
4398
+ }), Xi = Object.freeze({
4185
4399
  parse(t) {
4186
4400
  if (t.length !== 1 || t[0] !== "true" && t[0] !== "false")
4187
4401
  throw new TypeError("Expected one boolean query value");
@@ -4189,77 +4403,77 @@ const Hi = Object.freeze({
4189
4403
  },
4190
4404
  format: (t) => [String(t)]
4191
4405
  });
4192
- function _i(t, r = t) {
4193
- const e = Ge(t, "Route id"), i = ci(r, "Route path"), o = Object.freeze({
4406
+ function eo(t, r = t) {
4407
+ const e = Ye(t, "Route id"), i = gi(r, "Route path"), o = Object.freeze({
4194
4408
  id: e,
4195
4409
  kind: "literal",
4196
4410
  path: i
4197
4411
  });
4198
- return at.add(o), o;
4412
+ return lt.add(o), o;
4199
4413
  }
4200
- function Qi(t, r, e = t) {
4201
- const i = Ge(t, "Route id"), o = Ge(e, "Route parameter name");
4202
- ai(r);
4414
+ function to(t, r, e = t) {
4415
+ const i = Ye(t, "Route id"), o = Ye(e, "Route parameter name");
4416
+ mi(r);
4203
4417
  const s = Object.freeze({
4204
4418
  id: i,
4205
4419
  kind: "parameter",
4206
4420
  name: o,
4207
4421
  codec: r
4208
4422
  });
4209
- return at.add(s), s;
4423
+ return lt.add(s), s;
4210
4424
  }
4211
- function Bi(t, r) {
4212
- if (B(t), t.kind !== "parameter")
4425
+ function ro(t, r) {
4426
+ if (Q(t), t.kind !== "parameter")
4213
4427
  throw new TypeError("routeParameter requires a parameter route");
4214
4428
  const e = t.codec.format(r);
4215
- return ut(e, t.name), Object.freeze({ route: t, value: r });
4429
+ return ht(e, t.name), Object.freeze({ route: t, value: r });
4216
4430
  }
4217
- function Wi(...t) {
4431
+ function io(...t) {
4218
4432
  if (t.length === 0) throw new TypeError("routeTarget requires at least one route");
4219
4433
  for (const e of t)
4220
- if (Kt(e))
4221
- B(e.route);
4222
- else if (B(e), e.kind !== "literal")
4434
+ if (Ut(e))
4435
+ Q(e.route);
4436
+ else if (Q(e), e.kind !== "literal")
4223
4437
  throw new TypeError("Parameter routes require routeParameter(route, value)");
4224
4438
  const r = Object.freeze({ routes: Object.freeze([...t]) });
4225
- return lt.add(r), r;
4439
+ return ct.add(r), r;
4226
4440
  }
4227
- function Gi(t, r) {
4441
+ function oo(t, r) {
4228
4442
  if (Ce(t), r == null || typeof r != "object" || Array.isArray(r))
4229
4443
  throw new TypeError("Route target query must be an object");
4230
4444
  const e = Object.freeze({ routes: t.routes, query: Object.freeze({ ...r }) });
4231
- return lt.add(e), e;
4445
+ return ct.add(e), e;
4232
4446
  }
4233
- function Yi(t) {
4234
- return new We(t);
4447
+ function so(t) {
4448
+ return new Ge(t);
4235
4449
  }
4236
- function dt(t) {
4237
- return t != null && typeof t == "object" && at.has(t);
4450
+ function ut(t) {
4451
+ return t != null && typeof t == "object" && lt.has(t);
4238
4452
  }
4239
- function B(t) {
4240
- if (!dt(t))
4453
+ function Q(t) {
4454
+ if (!ut(t))
4241
4455
  throw new TypeError("Expected a route created by defineRoute() or defineRouteParameter()");
4242
4456
  }
4243
- function ni(t) {
4244
- return t != null && typeof t == "object" && lt.has(t);
4457
+ function fi(t) {
4458
+ return t != null && typeof t == "object" && ct.has(t);
4245
4459
  }
4246
4460
  function Ce(t) {
4247
- if (!ni(t)) throw new TypeError("Expected a target created by routeTarget()");
4461
+ if (!fi(t)) throw new TypeError("Expected a target created by routeTarget()");
4248
4462
  }
4249
- function ai(t) {
4463
+ function mi(t) {
4250
4464
  if (t == null || typeof t != "object" || typeof t.parse != "function" || typeof t.format != "function")
4251
4465
  throw new TypeError("Route codec requires parse and format functions");
4252
4466
  }
4253
- function li(t) {
4467
+ function bi(t) {
4254
4468
  if (t == null || typeof t != "object" || typeof t.parse != "function" || typeof t.format != "function")
4255
4469
  throw new TypeError("Route query codec requires parse and format functions");
4256
4470
  }
4257
- function Ke(t) {
4471
+ function Me(t) {
4258
4472
  Ce(t);
4259
4473
  const r = t.routes.map((o) => {
4260
- if (Kt(o)) {
4474
+ if (Ut(o)) {
4261
4475
  const s = o.route.codec.format(o.value);
4262
- return ut(s, o.route.name), encodeURIComponent(s);
4476
+ return ht(s, o.route.name), encodeURIComponent(s);
4263
4477
  }
4264
4478
  return encodeURIComponent(o.path);
4265
4479
  }), e = new URLSearchParams();
@@ -4271,30 +4485,30 @@ function Ke(t) {
4271
4485
  const i = e.toString();
4272
4486
  return `/${r.join("/")}${i === "" ? "" : `?${i}`}`;
4273
4487
  }
4274
- function Kt(t) {
4275
- return t != null && typeof t == "object" && "route" in t && "value" in t && dt(t.route) && t.route.kind === "parameter";
4488
+ function Ut(t) {
4489
+ return t != null && typeof t == "object" && "route" in t && "value" in t && ut(t.route) && t.route.kind === "parameter";
4276
4490
  }
4277
- function Ge(t, r) {
4491
+ function Ye(t, r) {
4278
4492
  if (typeof t != "string" || !/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(t))
4279
4493
  throw new TypeError(`${r} must be a lowercase kebab-case name`);
4280
4494
  return t;
4281
4495
  }
4282
- function ci(t, r) {
4496
+ function gi(t, r) {
4283
4497
  if (typeof t != "string" || t === "" || t === "." || t === ".." || t.includes("/") || t.includes("?") || t.includes("#"))
4284
4498
  throw new TypeError(`${r} must be one non-empty path segment`);
4285
4499
  try {
4286
- ut(decodeURIComponent(t), r);
4500
+ ht(decodeURIComponent(t), r);
4287
4501
  } catch {
4288
4502
  throw new TypeError(`${r} must use valid percent encoding`);
4289
4503
  }
4290
4504
  return t;
4291
4505
  }
4292
- function ut(t, r) {
4506
+ function ht(t, r) {
4293
4507
  if (typeof t != "string" || t === "" || t.includes("/"))
4294
4508
  throw new TypeError(`${r} codec must format one non-empty path segment`);
4295
4509
  }
4296
- const di = 16;
4297
- class ui {
4510
+ const yi = 16;
4511
+ class wi {
4298
4512
  constructor(r) {
4299
4513
  a(this, "root");
4300
4514
  a(this, "transition");
@@ -4312,22 +4526,22 @@ class ui {
4312
4526
  a(this, "applying", 0);
4313
4527
  a(this, "syncQueued", !1);
4314
4528
  a(this, "disposed", !1);
4315
- this.adapter = r, vi(r), this.root = Object.freeze({
4529
+ this.adapter = r, Ci(r), this.root = Object.freeze({
4316
4530
  route: null,
4317
4531
  parent: null,
4318
4532
  segment: null,
4319
4533
  value: null,
4320
4534
  pathname: "/"
4321
- }), Se.set(this.root, this), this.activeContext = this.root, this.requested = Me(r.read());
4535
+ }), Se.set(this.root, this), this.activeContext = this.root, this.requested = He(r.read());
4322
4536
  const e = Object.freeze({
4323
4537
  state: "pending",
4324
4538
  requestedLocation: this.requested.location,
4325
4539
  settledLocation: "/"
4326
4540
  });
4327
- this.transitionEmitter = new I(e, {
4541
+ this.transitionEmitter = new S(e, {
4328
4542
  owner: this,
4329
4543
  purpose: "browser route transition"
4330
- }), this.issueEmitter = new I(null, {
4544
+ }), this.issueEmitter = new S(null, {
4331
4545
  owner: this,
4332
4546
  purpose: "browser route issue"
4333
4547
  }), this.transition = this.transitionEmitter, this.issue = this.issueEmitter, this.adapterUnsubscribe = r.subscribe(() => {
@@ -4335,7 +4549,7 @@ class ui {
4335
4549
  }), this.startTransition(this.requested.location, 0, !1);
4336
4550
  }
4337
4551
  openScope(r, e) {
4338
- this.assertActive(), V(r, this), ge(e);
4552
+ this.assertActive(), H(r, this), ge(e);
4339
4553
  const i = this.scope(r);
4340
4554
  if (i.owners.has(e)) throw new Error("Route scope owner is already registered");
4341
4555
  i.owners.set(e, { complete: !1 }), this.wakeRegistry();
@@ -4345,46 +4559,46 @@ class ui {
4345
4559
  };
4346
4560
  }
4347
4561
  completeScope(r, e) {
4348
- this.assertActive(), V(r, this);
4562
+ this.assertActive(), H(r, this);
4349
4563
  const i = this.scope(r).owners.get(e);
4350
4564
  if (i == null) throw new Error("Cannot complete an unopened route scope");
4351
- hi(this.scope(r)), i.complete = !0, this.wakeRegistry();
4565
+ vi(this.scope(r)), i.complete = !0, this.wakeRegistry();
4352
4566
  }
4353
4567
  registerSelectionRoutes(r, e, i, o) {
4354
- if (this.assertActive(), V(r, this), ge(e), !Array.isArray(i)) throw new TypeError("Route bindings must be an array");
4568
+ if (this.assertActive(), H(r, this), ge(e), !Array.isArray(i)) throw new TypeError("Route bindings must be an array");
4355
4569
  if (typeof o != "function")
4356
4570
  throw new TypeError("Selection route registration requires a subscriber");
4357
4571
  const s = this.scope(r), n = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Set();
4358
4572
  for (const u of i) {
4359
- if (B(u.route), u.route.kind !== "literal")
4573
+ if (Q(u.route), u.route.kind !== "literal")
4360
4574
  throw new TypeError("Tab routes must use literal route descriptors");
4361
4575
  if (l.has(u.route) || s.entries.has(u.route))
4362
4576
  throw new Error(`Duplicate route in one scope: ${u.route.id}`);
4363
4577
  l.add(u.route);
4364
- const h = this.literalContext(r, u.route), b = {
4578
+ const p = this.literalContext(r, u.route), b = {
4365
4579
  owner: e,
4366
4580
  descriptor: u.route,
4367
4581
  parent: r,
4368
- match: (f) => He(f) === u.route.path ? { value: null } : null,
4582
+ match: (f) => Ve(f) === u.route.path ? { value: null } : null,
4369
4583
  currentValue: () => u.active() ? null : void 0,
4370
- activate: async (f, m, C) => {
4584
+ activate: async (f, m, R) => {
4371
4585
  if (u.disabled)
4372
- throw new ct(
4586
+ throw new dt(
4373
4587
  `Route "${u.route.id}" is currently disabled`
4374
4588
  );
4375
- if (C.aborted) throw C.reason;
4376
- return await u.activate(C), f;
4589
+ if (R.aborted) throw R.reason;
4590
+ return await u.activate(R), f;
4377
4591
  },
4378
- context: () => h,
4592
+ context: () => p,
4379
4593
  disposeSubscription: () => {
4380
4594
  }
4381
4595
  };
4382
- s.entries.set(u.route, b), n.set(u.route, h);
4596
+ s.entries.set(u.route, b), n.set(u.route, p);
4383
4597
  }
4384
4598
  const c = o(() => this.scheduleStateSync());
4385
4599
  for (const u of l) {
4386
- const h = s.entries.get(u);
4387
- h != null && (h.disposeSubscription = c);
4600
+ const p = s.entries.get(u);
4601
+ p != null && (p.disposeSubscription = c);
4388
4602
  }
4389
4603
  return this.wakeRegistry(), n;
4390
4604
  }
@@ -4393,9 +4607,9 @@ class ui {
4393
4607
  i != null && (this.removeOwnerEntries(i, e), this.wakeRegistry());
4394
4608
  }
4395
4609
  registerValueRoute(r, e, i) {
4396
- if (this.assertActive(), V(r, this), ge(e), B(i.route), i.route.kind !== "parameter")
4610
+ if (this.assertActive(), H(r, this), ge(e), Q(i.route), i.route.kind !== "parameter")
4397
4611
  throw new TypeError("Value routes require a parameter route descriptor");
4398
- if ($t(i.valueEmitter, "Value route emitter"), i.resolve != null && typeof i.resolve != "function")
4612
+ if (jt(i.valueEmitter, "Value route emitter"), i.resolve != null && typeof i.resolve != "function")
4399
4613
  throw new TypeError("Value route resolver must be a function");
4400
4614
  const o = this.scope(r);
4401
4615
  if (o.entries.has(i.route))
@@ -4407,17 +4621,17 @@ class ui {
4407
4621
  descriptor: i.route,
4408
4622
  parent: r,
4409
4623
  match: (u) => {
4410
- const h = He(u), b = i.route.codec.parse(h);
4411
- if (i.route.codec.format(b) !== h)
4624
+ const p = Ve(u), b = i.route.codec.parse(p);
4625
+ if (i.route.codec.format(b) !== p)
4412
4626
  throw new TypeError(
4413
4627
  `Route parameter "${i.route.name}" does not round-trip`
4414
4628
  );
4415
4629
  return { value: b };
4416
4630
  },
4417
4631
  currentValue: () => i.valueEmitter.get(),
4418
- activate: async (u, h, b) => {
4419
- const f = u.value, m = i.resolve == null ? f : await i.resolve(f, h, b);
4420
- if (m instanceof We) return m;
4632
+ activate: async (u, p, b) => {
4633
+ const f = u.value, m = i.resolve == null ? f : await i.resolve(f, p, b);
4634
+ if (m instanceof Ge) return m;
4421
4635
  if (b.aborted) throw b.reason;
4422
4636
  return this.withApplication(() => i.valueEmitter.set(
4423
4637
  m,
@@ -4430,7 +4644,7 @@ class ui {
4430
4644
  o.entries.set(i.route, l), this.wakeRegistry();
4431
4645
  let c = !0;
4432
4646
  return {
4433
- context: wi(i.valueEmitter, s, r),
4647
+ context: Ri(i.valueEmitter, s, r),
4434
4648
  contextFor: s,
4435
4649
  dispose: () => {
4436
4650
  if (!c) return;
@@ -4439,9 +4653,9 @@ class ui {
4439
4653
  };
4440
4654
  }
4441
4655
  registerQuery(r, e, i) {
4442
- this.assertActive(), V(r, this), ge(e);
4443
- const o = yi(i.name);
4444
- $t(i.valueEmitter, "Route query emitter"), li(i.codec);
4656
+ this.assertActive(), H(r, this), ge(e);
4657
+ const o = Ti(i.name);
4658
+ jt(i.valueEmitter, "Route query emitter"), bi(i.codec);
4445
4659
  const s = i.equals ?? Object.is;
4446
4660
  if (typeof s != "function") throw new TypeError("Route query equals must be a function");
4447
4661
  const n = this.scope(r);
@@ -4467,7 +4681,7 @@ class ui {
4467
4681
  }
4468
4682
  navigate(r, e = {}) {
4469
4683
  this.assertActive();
4470
- const i = ye(r) ? this.formatContext(r) : Ke(Ue(r));
4684
+ const i = ye(r) ? this.formatContext(r) : Me(_e(r));
4471
4685
  return this.issueEmitter.set(null, "explicit route navigation"), (e.history ?? "push") === "replace" ? this.adapter.replace(i) : this.adapter.push(i), this.startTransition(i, 0, !0);
4472
4686
  }
4473
4687
  redirect(r) {
@@ -4475,12 +4689,12 @@ class ui {
4475
4689
  }
4476
4690
  href(r) {
4477
4691
  this.assertActive();
4478
- const e = ye(r) ? this.formatContext(r) : Ke(Ue(r));
4692
+ const e = ye(r) ? this.formatContext(r) : Me(_e(r));
4479
4693
  return this.adapter.href(e);
4480
4694
  }
4481
4695
  resolve(r, e) {
4482
4696
  var o;
4483
- B(r), V(e, this);
4697
+ Q(r), H(e, this);
4484
4698
  let i = e;
4485
4699
  for (; i != null; ) {
4486
4700
  const s = (o = this.scopes.get(i)) == null ? void 0 : o.entries.get(r);
@@ -4500,8 +4714,8 @@ class ui {
4500
4714
  return this.formatStateLocation();
4501
4715
  }
4502
4716
  isActive(r, e = !1) {
4503
- const i = ye(r) ? r : this.resolveTargetContext(Ue(r));
4504
- return e ? i === this.activeContext : zt(i, this.activeContext);
4717
+ const i = ye(r) ? r : this.resolveTargetContext(_e(r));
4718
+ return e ? i === this.activeContext : At(i, this.activeContext);
4505
4719
  }
4506
4720
  dispose() {
4507
4721
  var r;
@@ -4520,7 +4734,7 @@ class ui {
4520
4734
  var s;
4521
4735
  this.assertActive(), (s = this.controller) == null || s.abort(new DOMException("Navigation superseded", "AbortError"));
4522
4736
  const o = new AbortController();
4523
- return this.controller = o, this.requested = Me(r), i && this.issueEmitter.set(null, "route transition started"), this.transitionEmitter.set(Object.freeze({
4737
+ return this.controller = o, this.requested = He(r), i && this.issueEmitter.set(null, "route transition started"), this.transitionEmitter.set(Object.freeze({
4524
4738
  state: "pending",
4525
4739
  requestedLocation: this.requested.location,
4526
4740
  settledLocation: this.formatContext(this.activeContext)
@@ -4534,15 +4748,15 @@ class ui {
4534
4748
  const n = /* @__PURE__ */ new Map();
4535
4749
  for (const c of r.segments) {
4536
4750
  const u = await this.waitForCompleteScope(s, o);
4537
- let h;
4751
+ let p;
4538
4752
  try {
4539
- h = pi(u, c);
4753
+ p = Ei(u, c);
4540
4754
  } catch (f) {
4541
- this.fallback(r, s, null, Ve(f));
4755
+ this.fallback(r, s, null, Ue(f));
4542
4756
  return;
4543
4757
  }
4544
- if (h == null) {
4545
- this.fallback(r, s, null, `Unknown route segment "${He(c)}"`);
4758
+ if (p == null) {
4759
+ this.fallback(r, s, null, `Unknown route segment "${Ve(c)}"`);
4546
4760
  return;
4547
4761
  }
4548
4762
  const b = Object.freeze({
@@ -4550,28 +4764,28 @@ class ui {
4550
4764
  resolvedValues: n
4551
4765
  });
4552
4766
  try {
4553
- const f = await h.entry.activate(h.match, b, o);
4554
- if (f instanceof We) {
4555
- if (i >= di) {
4556
- this.fallback(r, s, h.entry.descriptor, "Too many route redirects");
4767
+ const f = await p.entry.activate(p.match, b, o);
4768
+ if (f instanceof Ge) {
4769
+ if (i >= yi) {
4770
+ this.fallback(r, s, p.entry.descriptor, "Too many route redirects");
4557
4771
  return;
4558
4772
  }
4559
- const m = Ke(f.target);
4773
+ const m = Me(f.target);
4560
4774
  this.adapter.replace(m), await this.startTransition(m, i + 1, !1);
4561
4775
  return;
4562
4776
  }
4563
- h = { entry: h.entry, match: f };
4777
+ p = { entry: p.entry, match: f };
4564
4778
  } catch (f) {
4565
4779
  if (o.aborted) return;
4566
4780
  this.fallback(
4567
4781
  r,
4568
4782
  s,
4569
- h.entry.descriptor,
4570
- Ve(f)
4783
+ p.entry.descriptor,
4784
+ Ue(f)
4571
4785
  );
4572
4786
  return;
4573
4787
  }
4574
- n.set(h.entry.descriptor, h.match.value), s = h.entry.context(h.match.value);
4788
+ n.set(p.entry.descriptor, p.match.value), s = p.entry.context(p.match.value);
4575
4789
  }
4576
4790
  if (o.aborted || (s === this.root && (await this.waitForCompleteScope(this.root, o), s = this.findActiveContext()), o.aborted)) return;
4577
4791
  this.activeContext = s, this.applyQueriesInLineage(s, r);
@@ -4586,7 +4800,7 @@ class ui {
4586
4800
  for (; ; ) {
4587
4801
  if (e.aborted) throw e.reason;
4588
4802
  const i = this.scopes.get(r);
4589
- if (i != null && fi(i)) return i;
4803
+ if (i != null && xi(i)) return i;
4590
4804
  await this.waitForRegistryChange(e);
4591
4805
  }
4592
4806
  }
@@ -4635,7 +4849,7 @@ class ui {
4635
4849
  return this.cachedContext(r, e, o, i);
4636
4850
  }
4637
4851
  cachedContext(r, e, i, o) {
4638
- const s = bi(r.pathname, i), n = `${gi(r)}\0${e.id}\0${i}`, l = this.contextCache.get(n);
4852
+ const s = Si(r.pathname, i), n = `${Ii(r)}\0${e.id}\0${i}`, l = this.contextCache.get(n);
4639
4853
  if (l != null) return l;
4640
4854
  const c = Object.freeze({ route: e, parent: r, segment: i, value: o, pathname: s });
4641
4855
  return Se.set(c, this), this.contextCache.set(n, c), c;
@@ -4658,7 +4872,7 @@ class ui {
4658
4872
  this.applying > 0 || this.disposed || this.syncQueued || (this.syncQueued = !0, queueMicrotask(() => {
4659
4873
  if (this.syncQueued = !1, this.applying > 0 || this.disposed || this.transitionEmitter.get().state === "pending") return;
4660
4874
  const r = this.formatStateLocation();
4661
- r !== this.adapter.read() && this.adapter.replace(r), this.requested = Me(r), this.activeContext = this.findActiveContext(), this.transitionEmitter.set(Object.freeze({
4875
+ r !== this.adapter.read() && this.adapter.replace(r), this.requested = He(r), this.activeContext = this.findActiveContext(), this.transitionEmitter.set(Object.freeze({
4662
4876
  ...this.transitionEmitter.get(),
4663
4877
  state: "idle",
4664
4878
  settledLocation: r
@@ -4685,7 +4899,7 @@ class ui {
4685
4899
  formatContext(r) {
4686
4900
  const e = new URLSearchParams(this.requested.search);
4687
4901
  for (const o of this.knownQueryNames) e.delete(o);
4688
- for (const o of Ct(r)) {
4902
+ for (const o of Ot(r)) {
4689
4903
  const s = this.scopes.get(o);
4690
4904
  if (s != null)
4691
4905
  for (const n of [...s.queries.values()].sort((l, c) => l.name.localeCompare(c.name))) {
@@ -4701,7 +4915,7 @@ class ui {
4701
4915
  return `${r.pathname}${i === "" ? "" : `?${i}`}`;
4702
4916
  }
4703
4917
  applyQueriesInLineage(r, e) {
4704
- for (const i of Ct(r)) {
4918
+ for (const i of Ot(r)) {
4705
4919
  const o = this.scopes.get(i);
4706
4920
  if (o != null)
4707
4921
  for (const s of o.queries.values()) this.applyQueryEntry(s, e);
@@ -4709,7 +4923,7 @@ class ui {
4709
4923
  }
4710
4924
  applyQueryEntry(r, e) {
4711
4925
  var o;
4712
- if (!zt(r.context, this.activeContext) && !mi(r.context.pathname, e.pathname)) return;
4926
+ if (!At(r.context, this.activeContext) && !ki(r.context.pathname, e.pathname)) return;
4713
4927
  const i = e.search.getAll(r.name);
4714
4928
  try {
4715
4929
  const s = i.length === 0 ? r.defaultValue : r.codec.parse(i);
@@ -4725,7 +4939,7 @@ class ui {
4725
4939
  this.adapter.replace(l), this.issueEmitter.set(Object.freeze({
4726
4940
  requestedLocation: e.location,
4727
4941
  failedRouteId: ((o = r.context.route) == null ? void 0 : o.id) ?? null,
4728
- reason: Ve(s),
4942
+ reason: Ue(s),
4729
4943
  fallbackLocation: l
4730
4944
  }), "invalid route query");
4731
4945
  }
@@ -4743,12 +4957,12 @@ class ui {
4743
4957
  }
4744
4958
  }
4745
4959
  const Se = /* @__PURE__ */ new WeakMap();
4746
- function Ji(t) {
4960
+ function no(t) {
4747
4961
  if (t == null || typeof t != "object" || Array.isArray(t))
4748
4962
  throw new TypeError("Browser router options must be an object");
4749
- return new ui(t.adapter);
4963
+ return new wi(t.adapter);
4750
4964
  }
4751
- function Zi(t, r, e) {
4965
+ function ao(t, r, e) {
4752
4966
  if (t == null || typeof t.subscribe != "function")
4753
4967
  throw new TypeError("waitForRouteValue requires a readable emitter");
4754
4968
  if (typeof r != "function")
@@ -4756,26 +4970,26 @@ function Zi(t, r, e) {
4756
4970
  return new Promise((i, o) => {
4757
4971
  let s = !1, n = () => {
4758
4972
  };
4759
- const l = (h) => {
4760
- s || (s = !0, n(), e.removeEventListener("abort", c), h());
4973
+ const l = (p) => {
4974
+ s || (s = !0, n(), e.removeEventListener("abort", c), p());
4761
4975
  }, c = () => {
4762
4976
  l(() => o(e.reason));
4763
- }, u = (h, b, f) => {
4977
+ }, u = (p, b, f) => {
4764
4978
  b === "error" ? l(() => o(
4765
- f ?? new ct("Route prerequisite failed")
4766
- )) : r(h) && l(() => i(h));
4979
+ f ?? new dt("Route prerequisite failed")
4980
+ )) : r(p) && l(() => i(p));
4767
4981
  };
4768
4982
  if (e.aborted) {
4769
4983
  c();
4770
4984
  return;
4771
4985
  }
4772
- u(t.get(), t.getFetchState(), t.getError()), !s && (n = t.subscribe(({ value: h, fetchState: b, error: f }) => {
4773
- u(h, b, f);
4986
+ u(t.get(), t.getFetchState(), t.getError()), !s && (n = t.subscribe(({ value: p, fetchState: b, error: f }) => {
4987
+ u(p, b, f);
4774
4988
  }, { emitCurrent: !1 }), s ? n() : e.addEventListener("abort", c, { once: !0 }));
4775
4989
  });
4776
4990
  }
4777
- function Me(t) {
4778
- const r = q(t), e = r.indexOf("?"), i = e < 0 ? r : r.slice(0, e), o = e < 0 ? "" : r.slice(e + 1), s = i.split("/").filter(Boolean);
4991
+ function He(t) {
4992
+ const r = j(t), e = r.indexOf("?"), i = e < 0 ? r : r.slice(0, e), o = e < 0 ? "" : r.slice(e + 1), s = i.split("/").filter(Boolean);
4779
4993
  return Object.freeze({
4780
4994
  location: r,
4781
4995
  pathname: i,
@@ -4783,7 +4997,7 @@ function Me(t) {
4783
4997
  search: new URLSearchParams(o)
4784
4998
  });
4785
4999
  }
4786
- function hi(t) {
5000
+ function vi(t) {
4787
5001
  const r = /* @__PURE__ */ new Set(), e = /* @__PURE__ */ new Set();
4788
5002
  let i = null;
4789
5003
  for (const o of t.entries.values()) {
@@ -4802,7 +5016,7 @@ function hi(t) {
4802
5016
  }
4803
5017
  }
4804
5018
  }
4805
- function pi(t, r) {
5019
+ function Ei(t, r) {
4806
5020
  const e = [...t.entries.values()].sort((i, o) => i.descriptor.kind === o.descriptor.kind ? 0 : i.descriptor.kind === "literal" ? -1 : 1);
4807
5021
  for (const i of e) {
4808
5022
  const o = i.match(r);
@@ -4810,17 +5024,17 @@ function pi(t, r) {
4810
5024
  }
4811
5025
  return null;
4812
5026
  }
4813
- function fi(t) {
5027
+ function xi(t) {
4814
5028
  return t.owners.size > 0 && [...t.owners.values()].every(({ complete: r }) => r);
4815
5029
  }
4816
- function Ct(t) {
5030
+ function Ot(t) {
4817
5031
  const r = [];
4818
5032
  let e = t;
4819
5033
  for (; e != null; )
4820
5034
  r.unshift(e), e = e.parent;
4821
5035
  return r;
4822
5036
  }
4823
- function zt(t, r) {
5037
+ function At(t, r) {
4824
5038
  let e = r;
4825
5039
  for (; e != null; ) {
4826
5040
  if (e === t) return !0;
@@ -4828,45 +5042,45 @@ function zt(t, r) {
4828
5042
  }
4829
5043
  return !1;
4830
5044
  }
4831
- function mi(t, r) {
5045
+ function ki(t, r) {
4832
5046
  return t === "/" || r === t || r.startsWith(`${t}/`);
4833
5047
  }
4834
- function bi(t, r) {
5048
+ function Si(t, r) {
4835
5049
  return `${t === "/" ? "" : t}/${encodeURIComponent(r)}`;
4836
5050
  }
4837
- function gi(t) {
5051
+ function Ii(t) {
4838
5052
  return t.pathname;
4839
5053
  }
4840
- function He(t) {
5054
+ function Ve(t) {
4841
5055
  try {
4842
5056
  return decodeURIComponent(t);
4843
5057
  } catch {
4844
- throw new ct("Route contains malformed percent encoding");
5058
+ throw new dt("Route contains malformed percent encoding");
4845
5059
  }
4846
5060
  }
4847
- function yi(t) {
5061
+ function Ti(t) {
4848
5062
  if (typeof t != "string" || !/^[A-Za-z][A-Za-z0-9_.-]*$/.test(t))
4849
5063
  throw new TypeError("Route query name must start with a letter and use URL-safe characters");
4850
5064
  return t;
4851
5065
  }
4852
- function Ve(t) {
5066
+ function Ue(t) {
4853
5067
  return t instanceof Error && t.message !== "" ? t.message : "The requested route could not be resolved";
4854
5068
  }
4855
- function wi(t, r, e) {
5069
+ function Ri(t, r, e) {
4856
5070
  const i = t.get();
4857
5071
  return i == null ? e : r(i);
4858
5072
  }
4859
- function Ue(t) {
5073
+ function _e(t) {
4860
5074
  return Ce(t), t;
4861
5075
  }
4862
5076
  function ye(t) {
4863
5077
  return t != null && typeof t == "object" && Se.has(t);
4864
5078
  }
4865
- function V(t, r) {
5079
+ function H(t, r) {
4866
5080
  if (t !== r.root && (!ye(t) || Se.get(t) !== r))
4867
5081
  throw new TypeError("Resolved route does not belong to this router");
4868
5082
  }
4869
- function vi(t) {
5083
+ function Ci(t) {
4870
5084
  if (t == null || typeof t != "object" || typeof Reflect.get(t, "read") != "function" || typeof Reflect.get(t, "href") != "function" || typeof Reflect.get(t, "push") != "function" || typeof Reflect.get(t, "replace") != "function" || typeof Reflect.get(t, "subscribe") != "function")
4871
5085
  throw new TypeError("BrowserRouter requires a navigation adapter");
4872
5086
  }
@@ -4874,11 +5088,11 @@ function ge(t) {
4874
5088
  if (t == null || typeof t != "object" && typeof t != "function")
4875
5089
  throw new TypeError("Route registration owner must be an object");
4876
5090
  }
4877
- function $t(t, r) {
5091
+ function jt(t, r) {
4878
5092
  if (t == null || typeof t != "object" || typeof Reflect.get(t, "get") != "function" || typeof Reflect.get(t, "set") != "function" || typeof Reflect.get(t, "subscribe") != "function")
4879
5093
  throw new TypeError(`${r} must be a writable emitter`);
4880
5094
  }
4881
- class Ei extends g {
5095
+ class zi extends g {
4882
5096
  initialize() {
4883
5097
  const r = this._runtime.router;
4884
5098
  if (r == null) throw new Error("RouteLink requires a router in FrayRuntime");
@@ -4887,28 +5101,28 @@ class Ei extends g {
4887
5101
  render() {
4888
5102
  const r = this._runtime.router;
4889
5103
  if (r == null) throw new Error("RouteLink requires a router in FrayRuntime");
4890
- const e = dt(this.props.to) ? r.resolve(this.props.to, this._routeContext ?? r.root) : this.props.to, {
5104
+ const e = ut(this.props.to) ? r.resolve(this.props.to, this._routeContext ?? r.root) : this.props.to, {
4891
5105
  to: i,
4892
5106
  exact: o = !1,
4893
5107
  children: s = [],
4894
5108
  onClick: n,
4895
5109
  ...l
4896
5110
  } = this.props;
4897
- return w("a", {
5111
+ return se("a", {
4898
5112
  ...l,
4899
5113
  href: r.href(e),
4900
5114
  "aria-current": r.isActive(e, o) ? "page" : null,
4901
5115
  onClick: (c) => {
4902
- n == null || n(c), xi(c, l.target, l.download) && (c.preventDefault(), r.navigate(e));
5116
+ n == null || n(c), $i(c, l.target, l.download) && (c.preventDefault(), r.navigate(e));
4903
5117
  }
4904
5118
  }, s);
4905
5119
  }
4906
5120
  }
4907
- a(Ei, "liveProps", []);
4908
- function xi(t, r, e) {
5121
+ a(zi, "liveProps", []);
5122
+ function $i(t, r, e) {
4909
5123
  return !(t.defaultPrevented || t.button !== 0 || t.metaKey || t.ctrlKey || t.shiftKey || t.altKey || e != null && e !== !1 || r != null && r !== "" && r !== "_self");
4910
5124
  }
4911
- class ki extends g {
5125
+ class Oi extends g {
4912
5126
  constructor() {
4913
5127
  super(...arguments);
4914
5128
  a(this, "unregister", null);
@@ -4926,15 +5140,15 @@ class ki extends g {
4926
5140
  });
4927
5141
  }
4928
5142
  render() {
4929
- return w(Ie, null, this.props.children ?? []);
5143
+ return se(Ie, null, this.props.children ?? []);
4930
5144
  }
4931
5145
  onDestroy() {
4932
5146
  var e;
4933
5147
  (e = this.unregister) == null || e.call(this), this.unregister = null;
4934
5148
  }
4935
5149
  }
4936
- a(ki, "liveProps", []);
4937
- class Si extends g {
5150
+ a(Oi, "liveProps", []);
5151
+ class Ai extends g {
4938
5152
  constructor() {
4939
5153
  super(...arguments);
4940
5154
  a(this, "registration", null);
@@ -4951,7 +5165,7 @@ class Si extends g {
4951
5165
  }
4952
5166
  render() {
4953
5167
  const e = this.props.valueEmitter.get(), i = this.props.children ?? [];
4954
- return !this.props.scopeChildren || e == null || this.registration == null ? w(Ie, null, i) : w(Ee, {
5168
+ return !this.props.scopeChildren || e == null || this.registration == null ? se(Ie, null, i) : se(Ee, {
4955
5169
  key: this.registration.contextFor(e).pathname,
4956
5170
  context: this.registration.contextFor(e),
4957
5171
  children: i
@@ -4962,122 +5176,126 @@ class Si extends g {
4962
5176
  (e = this.registration) == null || e.dispose(), this.registration = null;
4963
5177
  }
4964
5178
  }
4965
- a(Si, "liveProps", []);
5179
+ a(Ai, "liveProps", []);
4966
5180
  export {
4967
- Lt as BaseSelectionHandler,
4968
- ui as BrowserRouter,
5181
+ Kt as BaseSelectionHandler,
5182
+ wi as BrowserRouter,
4969
5183
  ie as Button,
4970
- j as Checkbox,
4971
- ii as ColorPicker,
5184
+ A as Checkbox,
5185
+ ui as ColorPicker,
4972
5186
  g as Component,
4973
5187
  he as DataTable,
4974
- mr as DefaultTableFilterEncoding,
4975
- qt as DescriptionItem,
5188
+ kr as DefaultTableFilterEncoding,
5189
+ Dt as DescriptionItem,
4976
5190
  de as DescriptionList,
4977
5191
  fe as Dialog,
4978
- Oe as Dropdown,
4979
- y as FilterMode,
4980
- U as FilterPanel,
5192
+ Ae as Dropdown,
5193
+ v as FilterMode,
5194
+ V as FilterPanel,
4981
5195
  Ie as Fragment,
4982
- to as FrayRuntime,
4983
- ae as GroupPanel,
4984
- L as Header,
4985
- _r as Label,
5196
+ wt as FrayApp,
5197
+ Bt as FrayRuntime,
5198
+ Z as GroupPanel,
5199
+ N as Header,
5200
+ Xr as Label,
4986
5201
  ue as ListView,
4987
- Pi as MemoryNavigationAdapter,
4988
- Xt as MultiSelectionHandler,
5202
+ Wi as MemoryNavigationAdapter,
5203
+ ar as MultiSelectionHandler,
5204
+ ze as OptionGroup,
5205
+ vt as OptionsPanel,
4989
5206
  le as Panel,
4990
- H as Placeholder,
4991
- Fe as ProgressBar,
4992
- St as QuadCheckbox,
5207
+ M as Placeholder,
5208
+ De as ProgressBar,
5209
+ Rt as QuadCheckbox,
4993
5210
  oe as RadioButton,
4994
5211
  me as RadioGroup,
4995
- Ei as RouteLink,
4996
- ki as RouteQuery,
4997
- We as RouteRedirect,
5212
+ zi as RouteLink,
5213
+ Oi as RouteQuery,
5214
+ Ge as RouteRedirect,
4998
5215
  Ee as RouteScope,
4999
- ct as RouteUnavailableError,
5000
- Si as RouteValue,
5001
- ro as ServiceScope,
5216
+ dt as RouteUnavailableError,
5217
+ Ai as RouteValue,
5218
+ uo as ServiceScope,
5002
5219
  ce as Sidebar,
5003
- Ze as SingleSelectionHandler,
5004
- ze as SplitView,
5005
- io as StyleRegistry,
5006
- Ye as Tab,
5220
+ Xe as SingleSelectionHandler,
5221
+ $e as SplitView,
5222
+ ho as StyleRegistry,
5223
+ Je as Tab,
5007
5224
  X as TabLine,
5008
- ne as TabPanel,
5225
+ ae as TabPanel,
5009
5226
  re as TableHeader,
5010
5227
  te as TableHeaderCell,
5011
- je as Textbox,
5012
- ri as ThemePicker,
5013
- qe as Toggle,
5014
- Le as Toolbar,
5015
- it as TreeItem,
5228
+ qe as Textbox,
5229
+ di as ThemePicker,
5230
+ Ne as Toggle,
5231
+ Fe as Toolbar,
5232
+ ot as TreeItem,
5016
5233
  pe as TreeView,
5017
- It as TriCheckbox,
5018
- gr as applyLocalTableState,
5019
- ai as assertRouteCodec,
5020
- B as assertRouteDescriptor,
5021
- li as assertRouteQueryCodec,
5234
+ Ct as TriCheckbox,
5235
+ Ir as applyLocalTableState,
5236
+ mi as assertRouteCodec,
5237
+ Q as assertRouteDescriptor,
5238
+ bi as assertRouteQueryCodec,
5022
5239
  Ce as assertRouteTarget,
5023
- Ft as assertSort,
5024
- G as assertTreeNodes,
5025
- Ui as booleanRouteQueryCodec,
5026
- Ji as createBrowserRouter,
5027
- oo as createFrayRuntime,
5028
- kr as createHandlerTableDataSource,
5029
- Mi as createHashNavigation,
5030
- Ki as createHistoryNavigation,
5031
- xr as createLocalTableDataSource,
5032
- Ai as createQueryTableDataSource,
5033
- Sr as createRestTableDataSource,
5240
+ Mt as assertSort,
5241
+ W as assertTreeNodes,
5242
+ Xi as booleanRouteQueryCodec,
5243
+ no as createBrowserRouter,
5244
+ po as createFrayRuntime,
5245
+ Or as createHandlerTableDataSource,
5246
+ Yi as createHashNavigation,
5247
+ Gi as createHistoryNavigation,
5248
+ $r as createLocalTableDataSource,
5249
+ Mi as createQueryTableDataSource,
5250
+ Ar as createRestTableDataSource,
5034
5251
  xe as createSelectionHandler,
5035
- so as createServiceScope,
5036
- no as createStyleRegistry,
5037
- E as css,
5038
- ao as defaultFrayRuntime,
5039
- Xe as defaultItemKey,
5040
- _i as defineRoute,
5041
- Qi as defineRouteParameter,
5042
- lo as defineService,
5043
- Ci as deriveFilterPredicate,
5044
- zi as deriveFilteredItems,
5045
- qi as deriveTreeNode,
5046
- Jt as filterByState,
5252
+ fo as createServiceScope,
5253
+ mo as createStyleRegistry,
5254
+ w as css,
5255
+ bo as defaultFrayRuntime,
5256
+ et as defaultItemKey,
5257
+ eo as defineRoute,
5258
+ to as defineRouteParameter,
5259
+ go as defineService,
5260
+ Fi as deriveFilterPredicate,
5261
+ Di as deriveFilteredItems,
5262
+ Vi as deriveTreeNode,
5263
+ sr as filterByState,
5047
5264
  be as findFrayStylesheetOption,
5048
- ji as findTreeNode,
5049
- Ke as formatRouteTarget,
5050
- Zr as frayColorOptions,
5051
- Jr as frayThemeOptions,
5052
- Li as frayThemeVariableCatalog,
5053
- Di as getFrayAppearance,
5054
- w as h,
5265
+ Hi as findTreeNode,
5266
+ Me as formatRouteTarget,
5267
+ ni as frayColorOptions,
5268
+ si as frayThemeOptions,
5269
+ _i as frayThemeVariableCatalog,
5270
+ Bi as getFrayAppearance,
5271
+ se as h,
5055
5272
  Re as isFilterMode,
5056
- dt as isRouteDescriptor,
5057
- ni as isRouteTarget,
5058
- p as jsx,
5059
- co as jsxDEV,
5060
- v as jsxs,
5061
- uo as live,
5062
- Nt as matchesFilterState,
5063
- q as normalizeRouteLocation,
5064
- Oi as parseFilterState,
5065
- ho as provideService,
5066
- Yi as redirectTo,
5067
- Xr as replaceFrayStylesheet,
5068
- Bi as routeParameter,
5069
- Wi as routeTarget,
5070
- $i as serializeFilterState,
5071
- br as serializeTableQuery,
5072
- Fi as setFrayAppearance,
5073
- Hi as stringRouteCodec,
5074
- Vi as stringRouteQueryCodec,
5075
- po as styleRegistry,
5076
- Ot as tabButtonId,
5077
- At as tabPanelId,
5078
- Or as updateTreeNode,
5079
- Ni as updateWritableTreeNode,
5080
- Zi as waitForRouteValue,
5081
- Gi as withRouteQuery
5273
+ ut as isRouteDescriptor,
5274
+ fi as isRouteTarget,
5275
+ h as jsx,
5276
+ yo as jsxDEV,
5277
+ y as jsxs,
5278
+ wo as live,
5279
+ Pt as matchesFilterState,
5280
+ Li as mountFrayApp,
5281
+ j as normalizeRouteLocation,
5282
+ Ki as parseFilterState,
5283
+ vo as provideService,
5284
+ so as redirectTo,
5285
+ ai as replaceFrayStylesheet,
5286
+ ro as routeParameter,
5287
+ io as routeTarget,
5288
+ Pi as serializeFilterState,
5289
+ Sr as serializeTableQuery,
5290
+ Qi as setFrayAppearance,
5291
+ Ji as stringRouteCodec,
5292
+ Zi as stringRouteQueryCodec,
5293
+ Eo as styleRegistry,
5294
+ qt as tabButtonId,
5295
+ Nt as tabPanelId,
5296
+ Pr as updateTreeNode,
5297
+ Ui as updateWritableTreeNode,
5298
+ ao as waitForRouteValue,
5299
+ oo as withRouteQuery
5082
5300
  };
5083
5301
  //# sourceMappingURL=index.js.map