courthive-components 3.0.1 → 3.1.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.
@@ -14608,8 +14608,8 @@ function zx(e) {
14608
14608
  }
14609
14609
  var Bx = {
14610
14610
  name: "courthive-components",
14611
- packageManager: "pnpm@11.5.0",
14612
- version: "3.0.1",
14611
+ packageManager: "pnpm@11.5.1",
14612
+ version: "3.1.0",
14613
14613
  engines: { node: ">=22" },
14614
14614
  description: "Components for competitions projects",
14615
14615
  files: ["dist"],
@@ -14719,7 +14719,7 @@ var Bx = {
14719
14719
  "focus-trap": "^8.0.0",
14720
14720
  "timepicker-ui": "^4.1.2",
14721
14721
  "tippy.js": "6.3.7",
14722
- "tods-competition-factory": "5.2.1",
14722
+ "tods-competition-factory": "5.2.3",
14723
14723
  "vanillajs-datepicker": "1.3.4"
14724
14724
  }
14725
14725
  };
@@ -29551,13 +29551,502 @@ function tW(e, t) {
29551
29551
  return n.render(t), n;
29552
29552
  }
29553
29553
  //#endregion
29554
- //#region src/components/policy-catalog/ui/styles.ts
29555
- var nW = () => "pc-layout", rW = () => "pc-panel", iW = () => "pc-panel-header", aW = () => "pc-panel-title", oW = () => "pc-panel-meta", sW = () => "pc-toolbar", cW = () => "pc-input", lW = () => "pc-select", uW = () => "pc-catalog", dW = () => "pc-group", fW = () => "pc-group-header", pW = () => "pc-group-chevron", mW = () => "pc-group-body", hW = () => "pc-card", gW = () => "pc-card-title", _W = () => "pc-card-meta", vW = () => "pc-type-badge", yW = () => "pc-editor", bW = () => "pc-editor-header", xW = () => "pc-editor-header-left", SW = () => "pc-editor-actions", CW = () => "sp-btn sp-btn--sm", wW = () => "sp-btn sp-btn--sm sp-btn--accent", TW = () => "pc-dirty-dot", EW = () => "pc-editor-body", DW = () => "pc-empty", OW = () => "pc-json-editor", kW = () => "pc-json-error";
29554
+ //#region src/components/policy-catalog/editors/seeding/domain/seedingProjections.ts
29555
+ var nW = [
29556
+ {
29557
+ value: "SEPARATE",
29558
+ label: "Separate",
29559
+ description: "Each seed placed in its own section of the draw"
29560
+ },
29561
+ {
29562
+ value: "WATERFALL",
29563
+ label: "Waterfall",
29564
+ description: "Seeds cascade down section by section"
29565
+ },
29566
+ {
29567
+ value: "CLUSTER",
29568
+ label: "Cluster",
29569
+ description: "Seeds grouped in clusters (e.g. 5-8 together)"
29570
+ }
29571
+ ], rW = [
29572
+ "SINGLE_ELIMINATION",
29573
+ "DOUBLE_ELIMINATION",
29574
+ "ROUND_ROBIN",
29575
+ "ROUND_ROBIN_WITH_PLAYOFF",
29576
+ "FEED_IN",
29577
+ "FEED_IN_CHAMPIONSHIP",
29578
+ "FEED_IN_CHAMPIONSHIP_TO_SF",
29579
+ "FEED_IN_CHAMPIONSHIP_TO_QF",
29580
+ "FEED_IN_CHAMPIONSHIP_TO_R16",
29581
+ "FIRST_MATCH_LOSER_CONSOLATION",
29582
+ "CURTIS_CONSOLATION",
29583
+ "COMPASS",
29584
+ "OLYMPIC"
29585
+ ];
29586
+ function iW() {
29587
+ return {
29588
+ policyName: "",
29589
+ seedingProfile: { positioning: "SEPARATE" },
29590
+ validSeedPositions: { ignore: !0 },
29591
+ duplicateSeedNumbers: !0,
29592
+ drawSizeProgression: !0,
29593
+ seedsCountThresholds: [
29594
+ {
29595
+ drawSize: 4,
29596
+ minimumParticipantCount: 3,
29597
+ seedsCount: 2
29598
+ },
29599
+ {
29600
+ drawSize: 16,
29601
+ minimumParticipantCount: 12,
29602
+ seedsCount: 4
29603
+ },
29604
+ {
29605
+ drawSize: 32,
29606
+ minimumParticipantCount: 24,
29607
+ seedsCount: 8
29608
+ },
29609
+ {
29610
+ drawSize: 64,
29611
+ minimumParticipantCount: 48,
29612
+ seedsCount: 16
29613
+ }
29614
+ ]
29615
+ };
29616
+ }
29617
+ //#endregion
29618
+ //#region src/components/policy-catalog/editors/seeding/seedingEditorStore.ts
29619
+ function aW(e) {
29620
+ return structuredClone(e);
29621
+ }
29622
+ var oW = class {
29623
+ constructor(e) {
29624
+ this.listeners = /* @__PURE__ */ new Set(), this.config = e, this.state = {
29625
+ draft: aW(e.initialPolicy ?? iW()),
29626
+ expandedSections: new Set([
29627
+ "profile",
29628
+ "flags",
29629
+ "thresholds",
29630
+ "drawTypeOverrides"
29631
+ ]),
29632
+ dirty: !1
29633
+ };
29634
+ }
29635
+ getState() {
29636
+ return this.state;
29637
+ }
29638
+ getData() {
29639
+ return aW(this.state.draft);
29640
+ }
29641
+ setData(e) {
29642
+ this.state = {
29643
+ ...this.state,
29644
+ draft: aW(e),
29645
+ dirty: !1
29646
+ }, this.emit();
29647
+ }
29648
+ toggleSection(e) {
29649
+ let t = new Set(this.state.expandedSections);
29650
+ t.has(e) ? t.delete(e) : t.add(e), this.state = {
29651
+ ...this.state,
29652
+ expandedSections: t
29653
+ }, this.emit();
29654
+ }
29655
+ setPolicyName(e) {
29656
+ let t = aW(this.state.draft);
29657
+ t.policyName = e, this.commitDraft(t);
29658
+ }
29659
+ setPositioning(e) {
29660
+ let t = aW(this.state.draft);
29661
+ t.seedingProfile ??= {}, t.seedingProfile.positioning = e, this.commitDraft(t);
29662
+ }
29663
+ setValidSeedPositionsIgnore(e) {
29664
+ let t = aW(this.state.draft);
29665
+ t.validSeedPositions = { ignore: e }, this.commitDraft(t);
29666
+ }
29667
+ setDuplicateSeedNumbers(e) {
29668
+ let t = aW(this.state.draft);
29669
+ t.duplicateSeedNumbers = e, this.commitDraft(t);
29670
+ }
29671
+ setDrawSizeProgression(e) {
29672
+ let t = aW(this.state.draft);
29673
+ t.drawSizeProgression = e, this.commitDraft(t);
29674
+ }
29675
+ addThreshold() {
29676
+ let e = aW(this.state.draft);
29677
+ e.seedsCountThresholds ??= [];
29678
+ let t = e.seedsCountThresholds.at(-1), n = t ? t.drawSize * 2 : 4;
29679
+ e.seedsCountThresholds.push({
29680
+ drawSize: n,
29681
+ minimumParticipantCount: Math.max(1, Math.floor(n * .75)),
29682
+ seedsCount: Math.max(2, Math.floor(n / 4))
29683
+ }), this.commitDraft(e);
29684
+ }
29685
+ removeThreshold(e) {
29686
+ let t = aW(this.state.draft);
29687
+ t.seedsCountThresholds && (t.seedsCountThresholds.splice(e, 1), this.commitDraft(t));
29688
+ }
29689
+ setThresholdField(e, t, n) {
29690
+ let r = aW(this.state.draft), i = r.seedsCountThresholds?.[e];
29691
+ i && (i[t] = n, this.commitDraft(r));
29692
+ }
29693
+ sortThresholds() {
29694
+ let e = aW(this.state.draft);
29695
+ e.seedsCountThresholds && (e.seedsCountThresholds.sort((e, t) => e.drawSize - t.drawSize), this.commitDraft(e));
29696
+ }
29697
+ addDrawTypeOverride(e, t) {
29698
+ if (!e) return;
29699
+ let n = aW(this.state.draft);
29700
+ n.seedingProfile ??= {}, n.seedingProfile.drawTypes ??= {}, n.seedingProfile.drawTypes[e] = { positioning: t }, this.commitDraft(n);
29701
+ }
29702
+ removeDrawTypeOverride(e) {
29703
+ let t = aW(this.state.draft);
29704
+ t.seedingProfile?.drawTypes && (delete t.seedingProfile.drawTypes[e], Object.keys(t.seedingProfile.drawTypes).length === 0 && delete t.seedingProfile.drawTypes, this.commitDraft(t));
29705
+ }
29706
+ setDrawTypeOverridePositioning(e, t) {
29707
+ let n = aW(this.state.draft), r = n.seedingProfile?.drawTypes;
29708
+ r?.[e] && (r[e] = { positioning: t }, this.commitDraft(n));
29709
+ }
29710
+ subscribe(e) {
29711
+ return this.listeners.add(e), () => {
29712
+ this.listeners.delete(e);
29713
+ };
29714
+ }
29715
+ commitDraft(e) {
29716
+ this.state = {
29717
+ ...this.state,
29718
+ draft: e,
29719
+ dirty: !0
29720
+ }, this.emit(), this.config.onChange?.(aW(e));
29721
+ }
29722
+ emit() {
29723
+ for (let e of this.listeners) e(this.state);
29724
+ }
29725
+ }, sW = () => "sd-editor", cW = () => "sd-section", lW = () => "sd-section-header", uW = () => "sd-section-chevron", dW = () => "sd-section-body", fW = () => "sd-field-row", pW = () => "sd-field-label", mW = () => "sd-field-input", hW = () => "sd-checkbox-row", gW = () => "sd-checkbox-desc", _W = () => "sd-radio-group", vW = () => "sd-radio-option", yW = () => "sp-btn sp-btn--sm sp-btn--outline sd-add-btn", bW = () => "sp-btn sp-btn--sm sp-btn--ghost sd-sort-btn", xW = () => "sp-btn-icon sp-btn-icon--danger sd-remove-btn", SW = () => "sd-table-wrap", CW = () => "sd-table", wW = () => "sd-number-cell-input", TW = () => "sd-empty", EW = () => "sd-actions-row", DW = () => "sd-override-row", OW = () => "sd-override-add-row", kW = () => "sd-override-drawtype", AW = () => "sd-select";
29726
+ //#endregion
29727
+ //#region src/components/policy-catalog/editors/seeding/sections/profileSection.ts
29728
+ function jW(e) {
29729
+ let t = document.createElement("div"), n = document.createElement("div");
29730
+ n.className = fW();
29731
+ let r = document.createElement("div");
29732
+ r.className = pW(), r.textContent = "Policy name";
29733
+ let i = document.createElement("input");
29734
+ i.type = "text", i.className = mW() + " sd-field-input--wide", i.placeholder = "e.g. USTA SEEDING", i.addEventListener("input", () => e.setPolicyName(i.value)), n.appendChild(r), n.appendChild(i), t.appendChild(n);
29735
+ let a = document.createElement("div");
29736
+ a.className = fW() + " sd-field-row--top";
29737
+ let o = document.createElement("div");
29738
+ o.className = pW(), o.textContent = "Default positioning", a.appendChild(o);
29739
+ let s = document.createElement("div");
29740
+ s.className = _W();
29741
+ let c = [];
29742
+ for (let t of nW) {
29743
+ let n = document.createElement("label");
29744
+ n.className = vW();
29745
+ let r = document.createElement("input");
29746
+ r.type = "radio", r.name = "sd-positioning", r.value = t.value, r.addEventListener("change", () => {
29747
+ r.checked && e.setPositioning(t.value);
29748
+ });
29749
+ let i = document.createElement("span");
29750
+ i.innerHTML = `<strong>${t.label}</strong><div class="sd-radio-desc">${t.description}</div>`, n.appendChild(r), n.appendChild(i), s.appendChild(n), c.push({
29751
+ value: t.value,
29752
+ input: r
29753
+ });
29754
+ }
29755
+ a.appendChild(s), t.appendChild(a);
29756
+ function l(e) {
29757
+ document.activeElement !== i && (i.value = e.draft.policyName ?? "");
29758
+ let t = e.draft.seedingProfile?.positioning;
29759
+ for (let e of c) e.input.checked = e.value === t;
29760
+ }
29761
+ return {
29762
+ element: t,
29763
+ update: l
29764
+ };
29765
+ }
29766
+ //#endregion
29767
+ //#region src/components/policy-catalog/editors/seeding/sections/flagsSection.ts
29768
+ function MW(e) {
29769
+ let t = document.createElement("div"), n = [
29770
+ {
29771
+ id: "sd-valid-seed-positions-ignore",
29772
+ label: "Ignore valid seed positions",
29773
+ description: "Allow seeds to be placed at any drawPosition (rather than only canonical seeded positions).",
29774
+ read: (e) => e.draft.validSeedPositions?.ignore ?? !1,
29775
+ write: (t) => e.setValidSeedPositionsIgnore(t)
29776
+ },
29777
+ {
29778
+ id: "sd-duplicate-seed-numbers",
29779
+ label: "Allow duplicate seed numbers",
29780
+ description: "Permit shared seed numbers (e.g. multiple #5 seeds in CLUSTER positioning).",
29781
+ read: (e) => e.draft.duplicateSeedNumbers ?? !1,
29782
+ write: (t) => e.setDuplicateSeedNumbers(t)
29783
+ },
29784
+ {
29785
+ id: "sd-draw-size-progression",
29786
+ label: "Draw size progression",
29787
+ description: "Apply thresholds at or below the matched draw size, instead of requiring an exact match.",
29788
+ read: (e) => e.draft.drawSizeProgression ?? !1,
29789
+ write: (t) => e.setDrawSizeProgression(t)
29790
+ }
29791
+ ], r = [];
29792
+ for (let e of n) {
29793
+ let n = document.createElement("div");
29794
+ n.className = hW();
29795
+ let i = document.createElement("input");
29796
+ i.type = "checkbox", i.id = e.id, i.addEventListener("change", () => e.write(i.checked));
29797
+ let a = document.createElement("label");
29798
+ a.htmlFor = e.id, a.textContent = e.label;
29799
+ let o = document.createElement("div");
29800
+ o.className = gW(), o.textContent = e.description;
29801
+ let s = document.createElement("div");
29802
+ s.appendChild(a), s.appendChild(o), n.appendChild(i), n.appendChild(s), t.appendChild(n), r.push({
29803
+ def: e,
29804
+ input: i
29805
+ });
29806
+ }
29807
+ function i(e) {
29808
+ for (let t of r) t.input.checked = t.def.read(e);
29809
+ }
29810
+ return {
29811
+ element: t,
29812
+ update: i
29813
+ };
29814
+ }
29815
+ //#endregion
29816
+ //#region src/components/policy-catalog/editors/seeding/sections/thresholdsSection.ts
29817
+ var NW = [
29818
+ {
29819
+ field: "drawSize",
29820
+ label: "Draw size",
29821
+ min: 2,
29822
+ placeholder: "32"
29823
+ },
29824
+ {
29825
+ field: "minimumParticipantCount",
29826
+ label: "Min participants",
29827
+ min: 0,
29828
+ placeholder: "24"
29829
+ },
29830
+ {
29831
+ field: "seedsCount",
29832
+ label: "Seeds",
29833
+ min: 0,
29834
+ placeholder: "8"
29835
+ }
29836
+ ];
29837
+ function PW(e) {
29838
+ let t = document.createElement("div"), n = document.createElement("div");
29839
+ n.className = SW();
29840
+ let r = document.createElement("table");
29841
+ r.className = CW();
29842
+ let i = document.createElement("thead"), a = document.createElement("tr");
29843
+ for (let e of NW) {
29844
+ let t = document.createElement("th");
29845
+ t.textContent = e.label, a.appendChild(t);
29846
+ }
29847
+ let o = document.createElement("th");
29848
+ o.setAttribute("aria-label", "Actions"), a.appendChild(o), i.appendChild(a), r.appendChild(i);
29849
+ let s = document.createElement("tbody");
29850
+ r.appendChild(s), n.appendChild(r), t.appendChild(n);
29851
+ let c = document.createElement("div");
29852
+ c.className = TW(), c.textContent = "No seed-count thresholds defined. Add a row to configure seeds per draw size.", t.appendChild(c);
29853
+ let l = document.createElement("div");
29854
+ l.className = EW();
29855
+ let u = document.createElement("button");
29856
+ u.type = "button", u.className = yW(), u.textContent = "+ Add threshold", u.addEventListener("click", () => e.addThreshold());
29857
+ let d = document.createElement("button");
29858
+ d.type = "button", d.className = bW(), d.textContent = "Sort by draw size", d.addEventListener("click", () => e.sortThresholds()), l.appendChild(u), l.appendChild(d), t.appendChild(l);
29859
+ function f(t) {
29860
+ let n = t.draft.seedsCountThresholds ?? [];
29861
+ if (s.innerHTML = "", n.length === 0) {
29862
+ r.style.display = "none", c.style.display = "block", d.disabled = !0;
29863
+ return;
29864
+ }
29865
+ r.style.display = "", c.style.display = "none", d.disabled = n.length < 2;
29866
+ for (let t = 0; t < n.length; t++) {
29867
+ let r = n[t], i = document.createElement("tr");
29868
+ for (let n of NW) {
29869
+ let a = document.createElement("td"), o = document.createElement("input");
29870
+ o.type = "number", o.min = String(n.min), o.className = wW(), o.value = String(r[n.field]), n.placeholder && (o.placeholder = n.placeholder);
29871
+ let s = t, c = n.field;
29872
+ o.addEventListener("change", () => {
29873
+ let t = parseInt(o.value, 10);
29874
+ !isNaN(t) && t >= n.min ? e.setThresholdField(s, c, t) : o.value = String(r[n.field]);
29875
+ }), a.appendChild(o), i.appendChild(a);
29876
+ }
29877
+ let a = document.createElement("td"), o = document.createElement("button");
29878
+ o.type = "button", o.className = xW(), o.setAttribute("aria-label", `Remove threshold row ${t + 1}`), o.textContent = "×";
29879
+ let c = t;
29880
+ o.addEventListener("click", () => e.removeThreshold(c)), a.appendChild(o), i.appendChild(a), s.appendChild(i);
29881
+ }
29882
+ }
29883
+ return {
29884
+ element: t,
29885
+ update: f
29886
+ };
29887
+ }
29888
+ //#endregion
29889
+ //#region src/components/policy-catalog/editors/seeding/sections/drawTypeOverridesSection.ts
29890
+ function FW(e, t) {
29891
+ let n = document.createElement("select");
29892
+ n.className = AW();
29893
+ for (let e of nW) {
29894
+ let t = document.createElement("option");
29895
+ t.value = e.value, t.textContent = e.label, n.appendChild(t);
29896
+ }
29897
+ return n.value = e, n.addEventListener("change", () => t(n.value)), n;
29898
+ }
29899
+ function IW(e, t) {
29900
+ let n = document.createElement("div"), r = t.drawTypes ?? rW, i = document.createElement("div");
29901
+ n.appendChild(i);
29902
+ let a = document.createElement("div");
29903
+ a.className = TW(), a.textContent = "No draw-type overrides. The default positioning is used for every drawType.", n.appendChild(a);
29904
+ let o = document.createElement("div");
29905
+ o.className = OW();
29906
+ let s = document.createElement("select");
29907
+ s.className = AW();
29908
+ function c(e) {
29909
+ s.innerHTML = "";
29910
+ let t = document.createElement("option");
29911
+ t.value = "", t.textContent = "Select drawType…", s.appendChild(t);
29912
+ for (let t of r) {
29913
+ if (e.has(t)) continue;
29914
+ let n = document.createElement("option");
29915
+ n.value = t, n.textContent = t, s.appendChild(n);
29916
+ }
29917
+ }
29918
+ let l = FW("WATERFALL", () => {}), u = document.createElement("button");
29919
+ u.type = "button", u.className = yW(), u.textContent = "+ Add override", u.addEventListener("click", () => {
29920
+ let t = s.value;
29921
+ t && e.addDrawTypeOverride(t, l.value);
29922
+ });
29923
+ let d = document.createElement("div");
29924
+ d.className = EW(), d.appendChild(s), d.appendChild(l), d.appendChild(u), o.appendChild(d), n.appendChild(o);
29925
+ function f(t) {
29926
+ let n = t.draft.seedingProfile?.drawTypes ?? {}, r = Object.entries(n);
29927
+ if (i.innerHTML = "", r.length === 0) a.style.display = "block";
29928
+ else {
29929
+ a.style.display = "none";
29930
+ for (let [t, { positioning: n }] of r) {
29931
+ let r = document.createElement("div");
29932
+ r.className = DW();
29933
+ let a = document.createElement("div");
29934
+ a.className = kW(), a.textContent = t;
29935
+ let o = FW(n, (n) => e.setDrawTypeOverridePositioning(t, n)), s = document.createElement("button");
29936
+ s.type = "button", s.className = xW(), s.setAttribute("aria-label", `Remove override for ${t}`), s.textContent = "×", s.addEventListener("click", () => e.removeDrawTypeOverride(t)), r.appendChild(a), r.appendChild(o), r.appendChild(s), i.appendChild(r);
29937
+ }
29938
+ }
29939
+ c(new Set(Object.keys(n))), u.disabled = s.options.length <= 1;
29940
+ }
29941
+ return {
29942
+ element: n,
29943
+ update: f
29944
+ };
29945
+ }
29946
+ //#endregion
29947
+ //#region src/components/policy-catalog/editors/seeding/seedingEditorPanel.ts
29948
+ function LW(e, t) {
29949
+ let n = document.createElement("div");
29950
+ n.className = sW();
29951
+ let r = [
29952
+ {
29953
+ id: "profile",
29954
+ label: "Profile",
29955
+ factory: () => jW(e)
29956
+ },
29957
+ {
29958
+ id: "flags",
29959
+ label: "Flags",
29960
+ factory: () => MW(e)
29961
+ },
29962
+ {
29963
+ id: "thresholds",
29964
+ label: "Seed Count Thresholds",
29965
+ factory: () => PW(e)
29966
+ },
29967
+ {
29968
+ id: "drawTypeOverrides",
29969
+ label: "Draw Type Overrides",
29970
+ factory: () => IW(e, t)
29971
+ }
29972
+ ], i = [];
29973
+ for (let t of r) {
29974
+ let r = document.createElement("div");
29975
+ r.className = cW();
29976
+ let a = document.createElement("div");
29977
+ a.className = lW();
29978
+ let o = document.createElement("span");
29979
+ o.className = uW();
29980
+ let s = document.createElement("span");
29981
+ s.textContent = t.label, a.appendChild(o), a.appendChild(s), a.addEventListener("click", () => e.toggleSection(t.id));
29982
+ let c = document.createElement("div");
29983
+ c.className = dW();
29984
+ let l = t.factory();
29985
+ c.appendChild(l.element), r.appendChild(a), r.appendChild(c), n.appendChild(r), i.push({
29986
+ id: t.id,
29987
+ chevron: o,
29988
+ bodyEl: c,
29989
+ inner: l
29990
+ });
29991
+ }
29992
+ function a(e) {
29993
+ for (let t of i) {
29994
+ let n = e.expandedSections.has(t.id);
29995
+ t.chevron.textContent = n ? "▼" : "▶", t.bodyEl.style.display = n ? "block" : "none", n && t.inner.update(e);
29996
+ }
29997
+ }
29998
+ return {
29999
+ element: n,
30000
+ update: a
30001
+ };
30002
+ }
30003
+ //#endregion
30004
+ //#region src/components/policy-catalog/editors/seeding/seedingEditorControl.ts
30005
+ var RW = class e {
30006
+ constructor(e) {
30007
+ this.container = null, this.store = new oW(e), this.panel = LW(this.store, e), this.unsubscribe = this.store.subscribe((e) => {
30008
+ this.panel.update(e);
30009
+ }), this.panel.update(this.store.getState());
30010
+ }
30011
+ render(e) {
30012
+ this.container = e, e.appendChild(this.panel.element);
30013
+ }
30014
+ destroy() {
30015
+ this.unsubscribe(), this.container && this.panel.element.parentNode === this.container && this.container.removeChild(this.panel.element), this.container = null;
30016
+ }
30017
+ getData() {
30018
+ return this.store.getData();
30019
+ }
30020
+ setData(e) {
30021
+ this.store.setData(e);
30022
+ }
30023
+ getStore() {
30024
+ return this.store;
30025
+ }
30026
+ static createEditorInstance(t) {
30027
+ let n = new e({
30028
+ initialPolicy: t.initialData,
30029
+ onChange: (e) => t.onChange(e)
30030
+ });
30031
+ return {
30032
+ element: n.panel.element,
30033
+ setData(e) {
30034
+ n.setData(e);
30035
+ },
30036
+ getData() {
30037
+ return n.getData();
30038
+ },
30039
+ destroy() {
30040
+ n.destroy();
30041
+ }
30042
+ };
30043
+ }
30044
+ }, zW = () => "pc-layout", BW = () => "pc-panel", VW = () => "pc-panel-header", HW = () => "pc-panel-title", UW = () => "pc-panel-meta", WW = () => "pc-toolbar", GW = () => "pc-input", KW = () => "pc-select", qW = () => "pc-catalog", JW = () => "pc-group", YW = () => "pc-group-header", XW = () => "pc-group-chevron", ZW = () => "pc-group-body", QW = () => "pc-card", $W = () => "pc-card-title", eG = () => "pc-card-meta", tG = () => "pc-type-badge", nG = () => "pc-editor", rG = () => "pc-editor-header", iG = () => "pc-editor-header-left", aG = () => "pc-editor-actions", oG = () => "sp-btn sp-btn--sm", sG = () => "sp-btn sp-btn--sm sp-btn--accent", cG = () => "pc-dirty-dot", lG = () => "pc-editor-body", uG = () => "pc-empty", dG = () => "pc-json-editor", fG = () => "pc-json-error";
29556
30045
  //#endregion
29557
30046
  //#region src/components/policy-catalog/ui/policyCatalogLayout.ts
29558
- function AW(e) {
30047
+ function pG(e) {
29559
30048
  let t = document.createElement("div");
29560
- t.className = nW(), t.appendChild(e.catalogPanel.element), t.appendChild(e.editorShell.element);
30049
+ t.className = zW(), t.appendChild(e.catalogPanel.element), t.appendChild(e.editorShell.element);
29561
30050
  function n(t) {
29562
30051
  e.catalogPanel.update(t), e.editorShell.update(t);
29563
30052
  }
@@ -29568,51 +30057,51 @@ function AW(e) {
29568
30057
  }
29569
30058
  //#endregion
29570
30059
  //#region src/components/policy-catalog/domain/policyDefaults.ts
29571
- var jW = "scheduling", MW = "scoring", NW = "seeding", PW = "draws", FW = "avoidance", IW = "feedIn", LW = "progression", RW = "roundNaming", zW = "positionActions", BW = "matchUpActions", VW = "roundRobinTally", HW = "rankingPoints", UW = "competitiveBands", WW = "voluntaryConsolation", GW = "participant", KW = "display", qW = "audit", JW = "Tournament Operations", YW = "Scoring & Results", XW = "Ranking Points", ZW = "Draw Configuration", QW = "Participants", $W = "Display & Audit", eG = (e, t, n, r, i) => ({
30060
+ var mG = "scheduling", hG = "scoring", gG = "seeding", _G = "draws", vG = "avoidance", yG = "feedIn", bG = "progression", xG = "roundNaming", SG = "positionActions", CG = "matchUpActions", wG = "roundRobinTally", TG = "rankingPoints", EG = "competitiveBands", DG = "voluntaryConsolation", OG = "participant", kG = "display", AG = "audit", jG = "Tournament Operations", MG = "Scoring & Results", NG = "Ranking Points", PG = "Draw Configuration", FG = "Participants", IG = "Display & Audit", LG = (e, t, n, r, i) => ({
29572
30061
  policyType: e,
29573
30062
  label: t,
29574
30063
  description: n,
29575
30064
  group: r,
29576
30065
  hasEditor: i
29577
- }), tG = [
29578
- eG(jW, "Scheduling", "Match scheduling, average times, recovery times, daily limits", JW, !0),
29579
- eG(zW, "Position Actions", "Allowed position actions (alternates, walkovers, withdrawals)", JW, !1),
29580
- eG(BW, "MatchUp Actions", "Allowed matchUp status transitions and actions", JW, !1),
29581
- eG(FW, "Avoidance", "Draw placement avoidance rules (club, nationality, region)", JW, !1),
29582
- eG(MW, "Scoring", "Score entry validation and completion rules", YW, !1),
29583
- eG(VW, "Round Robin Tally", "Round-robin group standing calculation method", YW, !1),
29584
- eG(HW, "Ranking Points", "Point allocation by draw size, round, and result", XW, !0),
29585
- eG(UW, "Competitive Bands", "Rating/ranking band definitions for competitive grouping", YW, !1),
29586
- eG(PW, "Draws", "Draw generation rules and structure options", ZW, !1),
29587
- eG(NW, "Seeding", "Seeding thresholds and placement rules by draw size", ZW, !1),
29588
- eG(IW, "Feed-In", "Feed-in consolation structure rules", ZW, !1),
29589
- eG(LW, "Progression", "Player progression between draw structures", ZW, !1),
29590
- eG(WW, "Voluntary Consolation", "Voluntary consolation entry rules", ZW, !1),
29591
- eG(RW, "Round Naming", "Custom round name labels (QF, SF, F, etc.)", ZW, !1),
29592
- eG(GW, "Participant", "Participant display and data rules", QW, !1),
29593
- eG(KW, "Display", "Client display configuration (public vs admin views)", $W, !1),
29594
- eG(qW, "Audit", "Audit trail and change logging configuration", $W, !1)
30066
+ }), RG = [
30067
+ LG(mG, "Scheduling", "Match scheduling, average times, recovery times, daily limits", jG, !0),
30068
+ LG(SG, "Position Actions", "Allowed position actions (alternates, walkovers, withdrawals)", jG, !1),
30069
+ LG(CG, "MatchUp Actions", "Allowed matchUp status transitions and actions", jG, !1),
30070
+ LG(vG, "Avoidance", "Draw placement avoidance rules (club, nationality, region)", jG, !1),
30071
+ LG(hG, "Scoring", "Score entry validation and completion rules", MG, !1),
30072
+ LG(wG, "Round Robin Tally", "Round-robin group standing calculation method", MG, !1),
30073
+ LG(TG, "Ranking Points", "Point allocation by draw size, round, and result", NG, !0),
30074
+ LG(EG, "Competitive Bands", "Rating/ranking band definitions for competitive grouping", MG, !1),
30075
+ LG(_G, "Draws", "Draw generation rules and structure options", PG, !1),
30076
+ LG(gG, "Seeding", "Seeding thresholds and placement rules by draw size", PG, !0),
30077
+ LG(yG, "Feed-In", "Feed-in consolation structure rules", PG, !1),
30078
+ LG(bG, "Progression", "Player progression between draw structures", PG, !1),
30079
+ LG(DG, "Voluntary Consolation", "Voluntary consolation entry rules", PG, !1),
30080
+ LG(xG, "Round Naming", "Custom round name labels (QF, SF, F, etc.)", PG, !1),
30081
+ LG(OG, "Participant", "Participant display and data rules", FG, !1),
30082
+ LG(kG, "Display", "Client display configuration (public vs admin views)", IG, !1),
30083
+ LG(AG, "Audit", "Audit trail and change logging configuration", IG, !1)
29595
30084
  ];
29596
- function nG(e) {
29597
- return tG.find((t) => t.policyType === e);
29598
- }
29599
- function rG(e) {
29600
- return e === "rankingPoints" ? YV() : e === "scheduling" ? sU() : {};
29601
- }
29602
- var iG = [
29603
- JW,
29604
- YW,
29605
- XW,
29606
- ZW,
29607
- QW,
29608
- $W
30085
+ function zG(e) {
30086
+ return RG.find((t) => t.policyType === e);
30087
+ }
30088
+ function BG(e) {
30089
+ return e === "rankingPoints" ? YV() : e === "scheduling" ? sU() : e === "seeding" ? iW() : {};
30090
+ }
30091
+ var VG = [
30092
+ jG,
30093
+ MG,
30094
+ NG,
30095
+ PG,
30096
+ FG,
30097
+ IG
29609
30098
  ];
29610
30099
  //#endregion
29611
30100
  //#region src/components/policy-catalog/domain/catalogProjections.ts
29612
- function aG(e, t) {
30101
+ function HG(e, t) {
29613
30102
  let n = t.toLowerCase().trim();
29614
30103
  return n ? e.filter((e) => {
29615
- let t = nG(e.policyType);
30104
+ let t = zG(e.policyType);
29616
30105
  return [
29617
30106
  e.name,
29618
30107
  e.description,
@@ -29622,12 +30111,12 @@ function aG(e, t) {
29622
30111
  ].join(" ").toLowerCase().includes(n);
29623
30112
  }) : e;
29624
30113
  }
29625
- function oG(e, t) {
30114
+ function UG(e, t) {
29626
30115
  let n = /* @__PURE__ */ new Map();
29627
30116
  if (t === "type") {
29628
- for (let e of iG) n.set(e, []);
30117
+ for (let e of VG) n.set(e, []);
29629
30118
  for (let t of e) {
29630
- let e = nG(t.policyType)?.group ?? "Display & Audit", r = n.get(e);
30119
+ let e = zG(t.policyType)?.group ?? "Display & Audit", r = n.get(e);
29631
30120
  r ? r.push(t) : n.set(e, [t]);
29632
30121
  }
29633
30122
  for (let [e, t] of n) t.length === 0 && n.delete(e);
@@ -29639,21 +30128,21 @@ function oG(e, t) {
29639
30128
  }
29640
30129
  //#endregion
29641
30130
  //#region src/components/policy-catalog/ui/policyCatalogPanel.ts
29642
- function sG(e) {
30131
+ function WG(e) {
29643
30132
  let t = document.createElement("div");
29644
- t.className = rW(), t.style.overflowY = "auto", t.style.scrollbarWidth = "thin", t.style.scrollbarColor = "var(--sp-scrollbar) transparent";
30133
+ t.className = BW(), t.style.overflowY = "auto", t.style.scrollbarWidth = "thin", t.style.scrollbarColor = "var(--sp-scrollbar) transparent";
29645
30134
  let n = /* @__PURE__ */ new Set(), r = null, i = document.createElement("div");
29646
- i.className = iW();
30135
+ i.className = VW();
29647
30136
  let a = document.createElement("div");
29648
- a.className = aW(), a.textContent = "Policy Catalog";
30137
+ a.className = HW(), a.textContent = "Policy Catalog";
29649
30138
  let o = document.createElement("div");
29650
- o.className = oW(), i.appendChild(a), i.appendChild(o), t.appendChild(i);
30139
+ o.className = UW(), i.appendChild(a), i.appendChild(o), t.appendChild(i);
29651
30140
  let s = document.createElement("div");
29652
- s.className = sW();
30141
+ s.className = WW();
29653
30142
  let c = document.createElement("input");
29654
- c.type = "text", c.placeholder = "Search policies...", c.className = cW(), c.addEventListener("input", () => e.onSearchChange(c.value));
30143
+ c.type = "text", c.placeholder = "Search policies...", c.className = GW(), c.addEventListener("input", () => e.onSearchChange(c.value));
29655
30144
  let l = document.createElement("select");
29656
- l.className = lW();
30145
+ l.className = KW();
29657
30146
  for (let [e, t] of [["type", "By Type"], ["source", "By Source"]]) {
29658
30147
  let n = document.createElement("option");
29659
30148
  n.value = e, n.textContent = t, l.appendChild(n);
@@ -29665,7 +30154,7 @@ function sG(e) {
29665
30154
  d.className = "sp-btn-icon", d.textContent = "+", d.title = "New policy", d.style.cssText = "font-size:1rem;font-weight:700";
29666
30155
  let f = document.createElement("div");
29667
30156
  f.style.cssText = "display:none;position:absolute;top:100%;right:0;z-index:100;min-width:180px;background:var(--sp-panel-bg);border:1px solid var(--sp-border);border-radius:12px;box-shadow:var(--sp-panel-shadow);padding:4px;margin-top:4px";
29668
- let p = tG.filter((e) => e.hasEditor);
30157
+ let p = RG.filter((e) => e.hasEditor);
29669
30158
  for (let t of p) {
29670
30159
  let n = document.createElement("div");
29671
30160
  n.style.cssText = "padding:6px 10px;font-size:12px;border-radius:8px;cursor:pointer;color:var(--sp-text)", n.textContent = t.label, n.addEventListener("mouseenter", () => {
@@ -29682,31 +30171,31 @@ function sG(e) {
29682
30171
  f.style.display = "none";
29683
30172
  }), u.appendChild(d), u.appendChild(f), s.appendChild(c), s.appendChild(l), s.appendChild(u), t.appendChild(s);
29684
30173
  let m = document.createElement("div");
29685
- m.className = uW(), t.appendChild(m);
30174
+ m.className = qW(), t.appendChild(m);
29686
30175
  function h(t) {
29687
30176
  r = t;
29688
- let i = aG(t.catalog, t.searchQuery), a = oG(i, t.groupBy);
30177
+ let i = HG(t.catalog, t.searchQuery), a = UG(i, t.groupBy);
29689
30178
  o.textContent = `${i.length} policies`, c.value !== t.searchQuery && (c.value = t.searchQuery), l.value !== t.groupBy && (l.value = t.groupBy), m.innerHTML = "";
29690
30179
  for (let [i, o] of a) {
29691
30180
  let a = document.createElement("div");
29692
- a.className = dW();
30181
+ a.className = JW();
29693
30182
  let s = n.has(i), c = document.createElement("div");
29694
- c.className = fW();
30183
+ c.className = YW();
29695
30184
  let l = document.createElement("span");
29696
- l.className = pW(), l.textContent = s ? "▶" : "▼";
30185
+ l.className = XW(), l.textContent = s ? "▶" : "▼";
29697
30186
  let u = document.createElement("span");
29698
30187
  u.textContent = `${i} (${o.length})`, c.appendChild(l), c.appendChild(u), c.addEventListener("click", () => {
29699
30188
  n.has(i) ? n.delete(i) : n.add(i), r && h(r);
29700
30189
  });
29701
30190
  let d = document.createElement("div");
29702
- d.className = mW(), s && (d.style.display = "none");
30191
+ d.className = ZW(), s && (d.style.display = "none");
29703
30192
  for (let n of o) {
29704
30193
  let r = document.createElement("div");
29705
- r.className = hW(), n.id === t.selectedId && r.classList.add("active"), r.addEventListener("click", () => e.onSelectPolicy(n.id));
30194
+ r.className = QW(), n.id === t.selectedId && r.classList.add("active"), r.addEventListener("click", () => e.onSelectPolicy(n.id));
29706
30195
  let i = document.createElement("div");
29707
30196
  i.style.cssText = "display:flex;align-items:center;gap:4px";
29708
30197
  let a = document.createElement("div");
29709
- if (a.className = gW(), a.style.flex = "1", a.textContent = n.name, i.appendChild(a), e.onDuplicatePolicy) {
30198
+ if (a.className = $W(), a.style.flex = "1", a.textContent = n.name, i.appendChild(a), e.onDuplicatePolicy) {
29710
30199
  let t = document.createElement("span");
29711
30200
  t.style.cssText = "font-size:10px;cursor:pointer;color:var(--sp-muted);padding:2px", t.textContent = "⎘", t.title = "Duplicate", t.addEventListener("click", (t) => {
29712
30201
  t.stopPropagation(), e.onDuplicatePolicy?.(n.id);
@@ -29720,11 +30209,11 @@ function sG(e) {
29720
30209
  }
29721
30210
  r.appendChild(i);
29722
30211
  let o = document.createElement("div");
29723
- o.className = _W();
29724
- let s = nG(n.policyType), c = document.createElement("span");
29725
- c.className = vW(), c.textContent = s?.label ?? n.policyType;
30212
+ o.className = eG();
30213
+ let s = zG(n.policyType), c = document.createElement("span");
30214
+ c.className = tG(), c.textContent = s?.label ?? n.policyType;
29726
30215
  let l = document.createElement("span");
29727
- l.className = `${vW()} ${n.source}`, l.textContent = n.source, o.appendChild(c), o.appendChild(l), r.appendChild(o), d.appendChild(r);
30216
+ l.className = `${tG()} ${n.source}`, l.textContent = n.source, o.appendChild(c), o.appendChild(l), r.appendChild(o), d.appendChild(r);
29728
30217
  }
29729
30218
  a.appendChild(c), a.appendChild(d), m.appendChild(a);
29730
30219
  }
@@ -29736,12 +30225,12 @@ function sG(e) {
29736
30225
  }
29737
30226
  //#endregion
29738
30227
  //#region src/components/policy-catalog/domain/utils.ts
29739
- function cG(e) {
30228
+ function GG(e) {
29740
30229
  return structuredClone(e);
29741
30230
  }
29742
30231
  //#endregion
29743
30232
  //#region src/components/policy-catalog/engine/policyCatalogStore.ts
29744
- var lG = class {
30233
+ var KG = class {
29745
30234
  constructor(e) {
29746
30235
  this.listeners = /* @__PURE__ */ new Set(), this.config = e;
29747
30236
  let t = new Set((e.builtinPolicies ?? []).map((e) => e.id)), n = [...e.builtinPolicies ?? [], ...(e.userPolicies ?? []).filter((e) => !t.has(e.id))];
@@ -29771,7 +30260,7 @@ var lG = class {
29771
30260
  let t = this.state.catalog.find((t) => t.id === e);
29772
30261
  t && (this.setState({
29773
30262
  selectedId: e,
29774
- editorDraft: cG(t.policyData),
30263
+ editorDraft: GG(t.policyData),
29775
30264
  dirty: !1
29776
30265
  }), this.config.onSelectionChanged?.(t));
29777
30266
  }
@@ -29799,7 +30288,7 @@ var lG = class {
29799
30288
  if (!e || !this.state.editorDraft) return;
29800
30289
  let t = {
29801
30290
  ...e,
29802
- policyData: cG(this.state.editorDraft)
30291
+ policyData: GG(this.state.editorDraft)
29803
30292
  }, n = this.state.catalog.map((e) => e.id === t.id ? t : e);
29804
30293
  this.state = {
29805
30294
  ...this.state,
@@ -29810,7 +30299,7 @@ var lG = class {
29810
30299
  resetDraft() {
29811
30300
  let e = this.getSelectedItem();
29812
30301
  e && this.setState({
29813
- editorDraft: cG(e.policyData),
30302
+ editorDraft: GG(e.policyData),
29814
30303
  dirty: !1
29815
30304
  });
29816
30305
  }
@@ -29819,7 +30308,7 @@ var lG = class {
29819
30308
  if (!e) return;
29820
30309
  let t = {
29821
30310
  ...e,
29822
- policyData: this.state.editorDraft ? cG(this.state.editorDraft) : cG(e.policyData)
30311
+ policyData: this.state.editorDraft ? GG(this.state.editorDraft) : GG(e.policyData)
29823
30312
  };
29824
30313
  this.config.onPolicyApplied?.(t);
29825
30314
  }
@@ -29830,13 +30319,13 @@ var lG = class {
29830
30319
  policyType: e,
29831
30320
  source: "user",
29832
30321
  description: "",
29833
- policyData: rG(e)
30322
+ policyData: BG(e)
29834
30323
  }, r = [...this.state.catalog, n];
29835
30324
  return this.state = {
29836
30325
  ...this.state,
29837
30326
  catalog: r,
29838
30327
  selectedId: t,
29839
- editorDraft: cG(n.policyData),
30328
+ editorDraft: GG(n.policyData),
29840
30329
  dirty: !1
29841
30330
  }, this.emit(), this.config.onPolicyCreated?.(n), this.config.onSelectionChanged?.(n), t;
29842
30331
  }
@@ -29849,13 +30338,13 @@ var lG = class {
29849
30338
  policyType: t.policyType,
29850
30339
  source: "user",
29851
30340
  description: t.description,
29852
- policyData: cG(t.policyData)
30341
+ policyData: GG(t.policyData)
29853
30342
  }, i = [...this.state.catalog, r];
29854
30343
  return this.state = {
29855
30344
  ...this.state,
29856
30345
  catalog: i,
29857
30346
  selectedId: n,
29858
- editorDraft: cG(r.policyData),
30347
+ editorDraft: GG(r.policyData),
29859
30348
  dirty: !1
29860
30349
  }, this.emit(), this.config.onPolicyCreated?.(r), this.config.onSelectionChanged?.(r), n;
29861
30350
  }
@@ -29890,48 +30379,48 @@ var lG = class {
29890
30379
  };
29891
30380
  //#endregion
29892
30381
  //#region src/components/policy-catalog/ui/editorShell.ts
29893
- function uG(e) {
30382
+ function qG(e) {
29894
30383
  let t = document.createElement("div");
29895
- t.className = rW();
30384
+ t.className = BW();
29896
30385
  let n = document.createElement("div");
29897
- n.className = yW();
30386
+ n.className = nG();
29898
30387
  let r = document.createElement("div");
29899
- r.className = bW();
30388
+ r.className = rG();
29900
30389
  let i = document.createElement("div");
29901
- i.className = xW();
30390
+ i.className = iG();
29902
30391
  let a = document.createElement("div");
29903
- a.className = aW();
30392
+ a.className = HW();
29904
30393
  let o = document.createElement("span");
29905
- o.className = vW();
30394
+ o.className = tG();
29906
30395
  let s = document.createElement("span");
29907
- s.className = vW(), s.textContent = "read-only", s.style.display = "none";
30396
+ s.className = tG(), s.textContent = "read-only", s.style.display = "none";
29908
30397
  let c = document.createElement("div");
29909
- c.className = TW(), c.style.display = "none", c.title = "Unsaved changes", i.appendChild(c), i.appendChild(a), i.appendChild(o), i.appendChild(s);
30398
+ c.className = cG(), c.style.display = "none", c.title = "Unsaved changes", i.appendChild(c), i.appendChild(a), i.appendChild(o), i.appendChild(s);
29910
30399
  let l = document.createElement("div");
29911
- l.className = SW();
30400
+ l.className = aG();
29912
30401
  let u = document.createElement("button");
29913
- u.className = CW(), u.textContent = "Reset", u.addEventListener("click", () => e.onReset());
30402
+ u.className = oG(), u.textContent = "Reset", u.addEventListener("click", () => e.onReset());
29914
30403
  let d = document.createElement("button");
29915
- d.className = wW(), d.textContent = "Save", d.addEventListener("click", () => e.onSave());
30404
+ d.className = sG(), d.textContent = "Save", d.addEventListener("click", () => e.onSave());
29916
30405
  let f = document.createElement("button");
29917
- f.className = CW(), f.textContent = "Apply", f.addEventListener("click", () => e.onApply());
30406
+ f.className = oG(), f.textContent = "Apply", f.addEventListener("click", () => e.onApply());
29918
30407
  let p = document.createElement("button");
29919
- p.className = CW(), p.textContent = "Duplicate", p.addEventListener("click", () => e.onDuplicate()), l.appendChild(u), l.appendChild(d), l.appendChild(f), l.appendChild(p);
30408
+ p.className = oG(), p.textContent = "Duplicate", p.addEventListener("click", () => e.onDuplicate()), l.appendChild(u), l.appendChild(d), l.appendChild(f), l.appendChild(p);
29920
30409
  let m = document.createElement("div");
29921
- m.className = SW();
30410
+ m.className = aG();
29922
30411
  let h = document.createElement("button");
29923
- h.className = wW(), h.textContent = "Use as Template", h.addEventListener("click", () => e.onDuplicate()), m.appendChild(h), r.appendChild(i), r.appendChild(l), r.appendChild(m);
30412
+ h.className = sG(), h.textContent = "Use as Template", h.addEventListener("click", () => e.onDuplicate()), m.appendChild(h), r.appendChild(i), r.appendChild(l), r.appendChild(m);
29924
30413
  let g = document.createElement("div");
29925
- g.className = EW(), n.appendChild(r), n.appendChild(g);
30414
+ g.className = lG(), n.appendChild(r), n.appendChild(g);
29926
30415
  let _ = document.createElement("div");
29927
- _.className = DW(), _.textContent = "Select a policy to edit", t.appendChild(n), t.appendChild(_);
30416
+ _.className = uG(), _.textContent = "Select a policy to edit", t.appendChild(n), t.appendChild(_);
29928
30417
  function v(e) {
29929
30418
  let t = e.selectedId !== null;
29930
30419
  if (n.style.display = t ? "flex" : "none", _.style.display = t ? "none" : "flex", !t) return;
29931
30420
  let r = e.catalog.find((t) => t.id === e.selectedId);
29932
30421
  if (!r) return;
29933
30422
  let i = r.source === "builtin";
29934
- a.textContent = r.name, o.textContent = nG(r.policyType)?.label ?? r.policyType, s.style.display = i ? "" : "none", l.style.display = i ? "none" : "flex", m.style.display = i ? "flex" : "none", c.style.display = !i && e.dirty ? "block" : "none";
30423
+ a.textContent = r.name, o.textContent = zG(r.policyType)?.label ?? r.policyType, s.style.display = i ? "" : "none", l.style.display = i ? "none" : "flex", m.style.display = i ? "flex" : "none", c.style.display = !i && e.dirty ? "block" : "none";
29935
30424
  }
29936
30425
  return {
29937
30426
  element: t,
@@ -29941,13 +30430,13 @@ function uG(e) {
29941
30430
  }
29942
30431
  //#endregion
29943
30432
  //#region src/components/policy-catalog/ui/jsonEditor.ts
29944
- function dG(e) {
30433
+ function JG(e) {
29945
30434
  let t = document.createElement("div");
29946
- t.className = OW();
30435
+ t.className = dG();
29947
30436
  let n = document.createElement("textarea");
29948
30437
  n.value = JSON.stringify(e.initialData, null, 2);
29949
30438
  let r = document.createElement("div");
29950
- r.className = kW(), r.style.display = "none";
30439
+ r.className = fG(), r.style.display = "none";
29951
30440
  let i = { ...e.initialData };
29952
30441
  return n.addEventListener("input", () => {
29953
30442
  try {
@@ -29971,10 +30460,10 @@ function dG(e) {
29971
30460
  }
29972
30461
  //#endregion
29973
30462
  //#region src/components/policy-catalog/controller/policyCatalogControl.ts
29974
- var fG = class {
30463
+ var YG = class {
29975
30464
  constructor(e) {
29976
- this.currentEditor = null, this.container = null, this.store = new lG(e);
29977
- let t = sG({
30465
+ this.currentEditor = null, this.container = null, this.store = new KG(e);
30466
+ let t = WG({
29978
30467
  onSearchChange: (e) => this.store.setCatalogSearch(e),
29979
30468
  onGroupByChange: (e) => this.store.setCatalogGroupBy(e),
29980
30469
  onSelectPolicy: (e) => this.handleSelectPolicy(e),
@@ -29988,7 +30477,7 @@ var fG = class {
29988
30477
  this.store.deletePolicy(e), this.store.getSelectedItem() || this.destroyCurrentEditor();
29989
30478
  }
29990
30479
  });
29991
- this.editorShell = uG({
30480
+ this.editorShell = qG({
29992
30481
  onSave: () => this.store.savePolicy(),
29993
30482
  onReset: () => {
29994
30483
  this.store.resetDraft(), this.syncEditorFromStore();
@@ -29998,7 +30487,7 @@ var fG = class {
29998
30487
  let e = this.store.getSelectedItem();
29999
30488
  e && (this.store.duplicatePolicy(e.id), this.mountEditorForSelection());
30000
30489
  }
30001
- }), this.layout = AW({
30490
+ }), this.layout = pG({
30002
30491
  catalogPanel: t,
30003
30492
  editorShell: this.editorShell
30004
30493
  }), this.unsubscribe = this.store.subscribe((e) => {
@@ -30028,7 +30517,7 @@ var fG = class {
30028
30517
  },
30029
30518
  readonly: t
30030
30519
  };
30031
- e.policyType === "scheduling" ? this.currentEditor = eW.createEditorInstance(n) : e.policyType === "rankingPoints" ? this.currentEditor = iU.createEditorInstance(n) : this.currentEditor = dG(n), this.editorShell.bodyElement.innerHTML = "", this.editorShell.bodyElement.appendChild(this.currentEditor.element);
30520
+ e.policyType === "scheduling" ? this.currentEditor = eW.createEditorInstance(n) : e.policyType === "rankingPoints" ? this.currentEditor = iU.createEditorInstance(n) : e.policyType === "seeding" ? this.currentEditor = RW.createEditorInstance(n) : this.currentEditor = JG(n), this.editorShell.bodyElement.innerHTML = "", this.editorShell.bodyElement.appendChild(this.currentEditor.element);
30032
30521
  }
30033
30522
  syncEditorFromStore() {
30034
30523
  let e = this.store.getState();
@@ -30040,30 +30529,30 @@ var fG = class {
30040
30529
  };
30041
30530
  //#endregion
30042
30531
  //#region src/components/policy-catalog/editors/scheduling/domain/schedulingValidation.ts
30043
- function pG(e, t, n, r) {
30532
+ function XG(e, t, n, r) {
30044
30533
  e !== void 0 && e < 0 && r.push({
30045
30534
  severity: "error",
30046
30535
  path: t,
30047
30536
  message: n
30048
30537
  });
30049
30538
  }
30050
- function mG(e, t) {
30539
+ function ZG(e, t) {
30051
30540
  if (!e.defaultTimes) return;
30052
30541
  let n = e.defaultTimes.averageTimes;
30053
- if (n) for (let e = 0; e < n.length; e++) pG(n[e].minutes.default, `defaultTimes.averageTimes[${e}].minutes.default`, "Default average time must be non-negative", t), pG(n[e].minutes.DOUBLES, `defaultTimes.averageTimes[${e}].minutes.DOUBLES`, "Doubles average time must be non-negative", t);
30542
+ if (n) for (let e = 0; e < n.length; e++) XG(n[e].minutes.default, `defaultTimes.averageTimes[${e}].minutes.default`, "Default average time must be non-negative", t), XG(n[e].minutes.DOUBLES, `defaultTimes.averageTimes[${e}].minutes.DOUBLES`, "Doubles average time must be non-negative", t);
30054
30543
  let r = e.defaultTimes.recoveryTimes;
30055
- if (r) for (let e = 0; e < r.length; e++) pG(r[e].minutes.default, `defaultTimes.recoveryTimes[${e}].minutes.default`, "Default recovery time must be non-negative", t);
30544
+ if (r) for (let e = 0; e < r.length; e++) XG(r[e].minutes.default, `defaultTimes.recoveryTimes[${e}].minutes.default`, "Default recovery time must be non-negative", t);
30056
30545
  }
30057
- function hG(e, t) {
30546
+ function QG(e, t) {
30058
30547
  if (!e.defaultDailyLimits) return;
30059
30548
  let n = e.defaultDailyLimits;
30060
- pG(n.SINGLES, "defaultDailyLimits.SINGLES", "Singles daily limit must be non-negative", t), pG(n.DOUBLES, "defaultDailyLimits.DOUBLES", "Doubles daily limit must be non-negative", t), pG(n.total, "defaultDailyLimits.total", "Total daily limit must be non-negative", t);
30549
+ XG(n.SINGLES, "defaultDailyLimits.SINGLES", "Singles daily limit must be non-negative", t), XG(n.DOUBLES, "defaultDailyLimits.DOUBLES", "Doubles daily limit must be non-negative", t), XG(n.total, "defaultDailyLimits.total", "Total daily limit must be non-negative", t);
30061
30550
  }
30062
- function gG(e) {
30551
+ function $G(e) {
30063
30552
  let t = [];
30064
- return mG(e, t), hG(e, t), e.matchUpAverageTimes && _G(e.matchUpAverageTimes, "matchUpAverageTimes", "averageTimes", t), e.matchUpRecoveryTimes && vG(e.matchUpRecoveryTimes, "matchUpRecoveryTimes", t), yG(e, t), t;
30553
+ return ZG(e, t), QG(e, t), e.matchUpAverageTimes && eK(e.matchUpAverageTimes, "matchUpAverageTimes", "averageTimes", t), e.matchUpRecoveryTimes && tK(e.matchUpRecoveryTimes, "matchUpRecoveryTimes", t), nK(e, t), t;
30065
30554
  }
30066
- function _G(e, t, n, r) {
30555
+ function eK(e, t, n, r) {
30067
30556
  for (let i = 0; i < e.length; i++) {
30068
30557
  let a = e[i];
30069
30558
  a.matchUpFormatCodes.length || r.push({
@@ -30072,10 +30561,10 @@ function _G(e, t, n, r) {
30072
30561
  message: "At least one format code is required per format group"
30073
30562
  });
30074
30563
  let o = a[n];
30075
- if (o) for (let e = 0; e < o.length; e++) pG(o[e].minutes.default, `${t}[${i}].${n}[${e}].minutes.default`, "Time must be non-negative", r), pG(o[e].minutes.DOUBLES, `${t}[${i}].${n}[${e}].minutes.DOUBLES`, "Doubles time must be non-negative", r);
30564
+ if (o) for (let e = 0; e < o.length; e++) XG(o[e].minutes.default, `${t}[${i}].${n}[${e}].minutes.default`, "Time must be non-negative", r), XG(o[e].minutes.DOUBLES, `${t}[${i}].${n}[${e}].minutes.DOUBLES`, "Doubles time must be non-negative", r);
30076
30565
  }
30077
30566
  }
30078
- function vG(e, t, n) {
30567
+ function tK(e, t, n) {
30079
30568
  for (let r = 0; r < e.length; r++) {
30080
30569
  let i = e[r];
30081
30570
  i.matchUpFormatCodes.length || n.push({
@@ -30083,10 +30572,10 @@ function vG(e, t, n) {
30083
30572
  path: `${t}[${r}].matchUpFormatCodes`,
30084
30573
  message: "At least one format code is required per format group"
30085
30574
  });
30086
- for (let e = 0; e < i.recoveryTimes.length; e++) pG(i.recoveryTimes[e].minutes.default, `${t}[${r}].recoveryTimes[${e}].minutes.default`, "Recovery time must be non-negative", n), pG(i.recoveryTimes[e].minutes.DOUBLES, `${t}[${r}].recoveryTimes[${e}].minutes.DOUBLES`, "Doubles recovery time must be non-negative", n);
30575
+ for (let e = 0; e < i.recoveryTimes.length; e++) XG(i.recoveryTimes[e].minutes.default, `${t}[${r}].recoveryTimes[${e}].minutes.default`, "Recovery time must be non-negative", n), XG(i.recoveryTimes[e].minutes.DOUBLES, `${t}[${r}].recoveryTimes[${e}].minutes.DOUBLES`, "Doubles recovery time must be non-negative", n);
30087
30576
  }
30088
30577
  }
30089
- function yG(e, t) {
30578
+ function nK(e, t) {
30090
30579
  let n = (e, n) => {
30091
30580
  if (!e) return;
30092
30581
  let r = /* @__PURE__ */ new Map();
@@ -30100,9 +30589,9 @@ function yG(e, t) {
30100
30589
  }
30101
30590
  //#endregion
30102
30591
  //#region src/components/policy-catalog/index.ts
30103
- function bG(e, t) {
30104
- let n = new fG(e);
30592
+ function rK(e, t) {
30593
+ let n = new YG(e);
30105
30594
  return n.render(t), n;
30106
30595
  }
30107
30596
  //#endregion
30108
- export { VP as AvailabilityGrid, Bv as COMPETITIVENESS_BUCKETS, Vk as COMPETITIVENESS_COLORS, Dh as COURT_SVG_RESOURCE_SUB_TYPE, cB as CompositionEditorStore, zk as DEFAULT_COMPETITIVE_BANDS, B_ as DEFAULT_COURT_CARD_CONFIG, iy as DEFAULT_DRAW_CARD_CONFIG, Xy as DEFAULT_EVENT_CARD_CONFIG, Bz as DEFAULT_SCHEDULE_CELL_CONFIG, Gh as DEFAULT_TOURNAMENT_CARD_CONFIG, Xg as DEFAULT_VENUE_CARD_CONFIG, $x as DrawStateManager, Zy as EVENT_CARD_LIGHT_MODE_THRESHOLD, As as InlineScoringManager, Hx as MATCH_FORMATS, Hk as NEUTRAL_SEGMENT_COLOR, iG as POLICY_TYPE_GROUPS, tG as POLICY_TYPE_METADATA, fG as PolicyCatalogControl, lG as PolicyCatalogStore, EN as ProfileStore, vz as SchedulePageControl, _z as SchedulePageStore, eW as SchedulingEditorControl, cU as SchedulingEditorStore, zN as SchedulingProfileControl, VL as TopologyBuilderControl, BF as TopologyStore, oB as activateScheduleCellTypeAhead, Uv as aggregateCompetitiveness, gN as applyDropCommit, Th as badmintonCourt, mj as barButton, Sh as baseballDiamond, xh as basketballCourt, Lz as buildActiveStripPanel, Wh as buildCardSkeleton, Kv as buildCompetitivenessBar, ry as buildCompetitivenessDonut, ov as buildCourtCard, gz as buildCourtGridSlot, Sv as buildCourtSkeletonCard, LN as buildDateStrip, wy as buildDrawCard, Uy as buildDrawSkeletonCard, FI as buildEdgeEditor, uG as buildEditorShell, wb as buildEventCard, Hb as buildEventSkeletonCard, Ix as buildHiveIDLogin, UV as buildInteractiveScoringShell, mN as buildIssueIndex, QM as buildIssuesPanel, dG as buildJsonEditor, cz as buildMatchUpCard, dz as buildMatchUpCatalog, CI as buildNodeEditor, AW as buildPolicyCatalogLayout, sG as buildPolicyCatalogPanel, oj as buildRatingDistributionChart, MN as buildRoundCard, qM as buildRoundCatalog, hz as buildScheduleDateStrip, Vz as buildScheduleGridCell, tz as buildScheduleInspectorPanel, fz as buildScheduleIssueIndex, mz as buildScheduleIssuesPanel, ZR as buildSchedulePageLayout, $U as buildSchedulingEditorPanel, AM as buildSchedulingProfileLayout, ac as buildSetScore, Pg as buildSkeletonCard, DF as buildStructureCard, Ri as buildStructureMinimap, Lv as buildTeamCard, uL as buildToolbar, dL as buildTopologyBuilderLayout, ZF as buildTopologyCanvas, gg as buildTournamentCard, PN as buildVenueBoard, __ as buildVenueCard, P_ as buildVenueSkeletonCard, bA as burstChart, B as cModal, tc as calculateComplement, Xk as competitivenessColor, Lx as completeMagicLink, ki as compositions, oz as computeBaseRoundByEvent, Dx as consumeMagicLink, Mj as controlBar, Vx as courthiveComponentsVersion, HP as createAvailabilityGrid, jM as createCardPopoverManager, lV as createCompositionEditor, Ph as createCourtSvg, VV as createInlineScoringFooter, ph as createNotesEditor, bG as createPolicyCatalog, hV as createPrintCompositionEditor, sB as createSchedulePage, tW as createSchedulingEditor, BN as createSchedulingProfile, _h as destroyTipster, Pd as drawer, lj as dropDownButton, sU as emptySchedulingPolicy, Os as engineToMatchUp, Uh as extractCourtSvgSport, Hh as extractImageURL, VM as filterCatalog, az as filterMatchUpCatalog, aG as filterPolicyCatalog, SN as findIssuesForLocator, Ih as formatAddress, aU as formatCodeLabel, Bh as formatDateRange, Gg as formatFeeRange, Lh as formatVenueLocation, EA as fromFactoryDrawData, kA as fromLegacyDraw, rF as generatePreviewMatchUps, Wo as getAgeCategoryModal, qo as getCategoryModal, qk as getCompetitivenessBand, Jk as getCompetitivenessFromScoreString, ws as getFlightProfileModal, oa as getGenerateTeamsModal, no as getMatchUpFormatModal, ec as getMatchWinner, Xs as getMaxAllowedScore, ea as getMockParticipantsModal, UM as getPlannedRoundKeys, nG as getPolicyTypeMeta, OF as getPortPosition, xN as getRoundAt, Ns as getScoringConfig, qs as getSetFormatForIndex, Qs as getSetWinner, bN as getVenueRounds, HM as groupCatalog, sz as groupMatchUpCatalog, oG as groupPolicyCatalog, Ch as hockeyRink, Fd as initDrawer, iz as isCompletedStatus, Ox as isExistingUserConflict, $s as isMatchComplete, Zs as isSetComplete, Js as isSetTiebreakOnly, Ys as isSetTimed, kv as mapCourtToCardData, Yy as mapDrawDefinitionToCardData, ax as mapEventToCardData, aB as mapMatchUpToCellData, Yg as mapTournamentToCardData, z_ as mapVenueToCardData, QR as matchUpLabel, ez as matchUpSearchKey, wN as maxSeverity, V_ as mergeCourtCardConfig, ay as mergeDrawCardConfig, Qy as mergeEventCardConfig, Kh as mergeTournamentCardConfig, Zg as mergeVenueCardConfig, Ym as notesToolbar, fa as openCompositionEditorModal, ma as openScheduleCellConfigModal, Eh as padelCourt, $R as participantLabel, wh as pickleballCourt, Ux as renderButtons, yi as renderContainer, jn as renderField, Ui as renderForm, Es as renderInlineMatchUp, hi as renderMatchUp, mh as renderMenu, An as renderOptions, Ar as renderParticipant, Rn as renderParticipantInput, gi as renderRound, Mr as renderRoundHeader, Bi as renderSchematicMatchUp, Vi as renderSchematicRound, Hi as renderSchematicStructure, jV as renderScorecard, _i as renderStructure, MV as renderTeamVsHeader, Ex as requestMagicLink, Fs as resetScoringConfig, Mh as resolveCourtSport, Gb as resolveEventStatus, ji as resolvePublishedComposition, zg as resolveTournamentStatus, Cu as scoringModal, dj as selectItem, Ps as setScoringConfig, nc as shouldApplySmartComplement, ic as shouldCreateNextSet, rc as shouldShowTiebreak, zP as showCourtAvailabilityModal, wx as signup, jh as sportFromMatchUpFormat, jL as standardTemplates, rS as syncClearVisibility, bh as tennisCourt, vh as tipster, Sj as toggleOverlay, iR as topologyToDrawOptions, Wv as totalBuckets, Zm as updateHeadingSelect, NV as updateTieScore, Xm as updateToolbarState, nN as validateProfile, gG as validateSchedulingPolicy, GI as validateTopology, Dn as validator, Qx as validators, Tx as verifyExisting, nS as wrapSearchWithClear };
30597
+ export { VP as AvailabilityGrid, Bv as COMPETITIVENESS_BUCKETS, Vk as COMPETITIVENESS_COLORS, Dh as COURT_SVG_RESOURCE_SUB_TYPE, cB as CompositionEditorStore, zk as DEFAULT_COMPETITIVE_BANDS, B_ as DEFAULT_COURT_CARD_CONFIG, iy as DEFAULT_DRAW_CARD_CONFIG, Xy as DEFAULT_EVENT_CARD_CONFIG, Bz as DEFAULT_SCHEDULE_CELL_CONFIG, Gh as DEFAULT_TOURNAMENT_CARD_CONFIG, Xg as DEFAULT_VENUE_CARD_CONFIG, $x as DrawStateManager, Zy as EVENT_CARD_LIGHT_MODE_THRESHOLD, As as InlineScoringManager, Hx as MATCH_FORMATS, Hk as NEUTRAL_SEGMENT_COLOR, VG as POLICY_TYPE_GROUPS, RG as POLICY_TYPE_METADATA, YG as PolicyCatalogControl, KG as PolicyCatalogStore, EN as ProfileStore, vz as SchedulePageControl, _z as SchedulePageStore, eW as SchedulingEditorControl, cU as SchedulingEditorStore, zN as SchedulingProfileControl, VL as TopologyBuilderControl, BF as TopologyStore, oB as activateScheduleCellTypeAhead, Uv as aggregateCompetitiveness, gN as applyDropCommit, Th as badmintonCourt, mj as barButton, Sh as baseballDiamond, xh as basketballCourt, Lz as buildActiveStripPanel, Wh as buildCardSkeleton, Kv as buildCompetitivenessBar, ry as buildCompetitivenessDonut, ov as buildCourtCard, gz as buildCourtGridSlot, Sv as buildCourtSkeletonCard, LN as buildDateStrip, wy as buildDrawCard, Uy as buildDrawSkeletonCard, FI as buildEdgeEditor, qG as buildEditorShell, wb as buildEventCard, Hb as buildEventSkeletonCard, Ix as buildHiveIDLogin, UV as buildInteractiveScoringShell, mN as buildIssueIndex, QM as buildIssuesPanel, JG as buildJsonEditor, cz as buildMatchUpCard, dz as buildMatchUpCatalog, CI as buildNodeEditor, pG as buildPolicyCatalogLayout, WG as buildPolicyCatalogPanel, oj as buildRatingDistributionChart, MN as buildRoundCard, qM as buildRoundCatalog, hz as buildScheduleDateStrip, Vz as buildScheduleGridCell, tz as buildScheduleInspectorPanel, fz as buildScheduleIssueIndex, mz as buildScheduleIssuesPanel, ZR as buildSchedulePageLayout, $U as buildSchedulingEditorPanel, AM as buildSchedulingProfileLayout, ac as buildSetScore, Pg as buildSkeletonCard, DF as buildStructureCard, Ri as buildStructureMinimap, Lv as buildTeamCard, uL as buildToolbar, dL as buildTopologyBuilderLayout, ZF as buildTopologyCanvas, gg as buildTournamentCard, PN as buildVenueBoard, __ as buildVenueCard, P_ as buildVenueSkeletonCard, bA as burstChart, B as cModal, tc as calculateComplement, Xk as competitivenessColor, Lx as completeMagicLink, ki as compositions, oz as computeBaseRoundByEvent, Dx as consumeMagicLink, Mj as controlBar, Vx as courthiveComponentsVersion, HP as createAvailabilityGrid, jM as createCardPopoverManager, lV as createCompositionEditor, Ph as createCourtSvg, VV as createInlineScoringFooter, ph as createNotesEditor, rK as createPolicyCatalog, hV as createPrintCompositionEditor, sB as createSchedulePage, tW as createSchedulingEditor, BN as createSchedulingProfile, _h as destroyTipster, Pd as drawer, lj as dropDownButton, sU as emptySchedulingPolicy, Os as engineToMatchUp, Uh as extractCourtSvgSport, Hh as extractImageURL, VM as filterCatalog, az as filterMatchUpCatalog, HG as filterPolicyCatalog, SN as findIssuesForLocator, Ih as formatAddress, aU as formatCodeLabel, Bh as formatDateRange, Gg as formatFeeRange, Lh as formatVenueLocation, EA as fromFactoryDrawData, kA as fromLegacyDraw, rF as generatePreviewMatchUps, Wo as getAgeCategoryModal, qo as getCategoryModal, qk as getCompetitivenessBand, Jk as getCompetitivenessFromScoreString, ws as getFlightProfileModal, oa as getGenerateTeamsModal, no as getMatchUpFormatModal, ec as getMatchWinner, Xs as getMaxAllowedScore, ea as getMockParticipantsModal, UM as getPlannedRoundKeys, zG as getPolicyTypeMeta, OF as getPortPosition, xN as getRoundAt, Ns as getScoringConfig, qs as getSetFormatForIndex, Qs as getSetWinner, bN as getVenueRounds, HM as groupCatalog, sz as groupMatchUpCatalog, UG as groupPolicyCatalog, Ch as hockeyRink, Fd as initDrawer, iz as isCompletedStatus, Ox as isExistingUserConflict, $s as isMatchComplete, Zs as isSetComplete, Js as isSetTiebreakOnly, Ys as isSetTimed, kv as mapCourtToCardData, Yy as mapDrawDefinitionToCardData, ax as mapEventToCardData, aB as mapMatchUpToCellData, Yg as mapTournamentToCardData, z_ as mapVenueToCardData, QR as matchUpLabel, ez as matchUpSearchKey, wN as maxSeverity, V_ as mergeCourtCardConfig, ay as mergeDrawCardConfig, Qy as mergeEventCardConfig, Kh as mergeTournamentCardConfig, Zg as mergeVenueCardConfig, Ym as notesToolbar, fa as openCompositionEditorModal, ma as openScheduleCellConfigModal, Eh as padelCourt, $R as participantLabel, wh as pickleballCourt, Ux as renderButtons, yi as renderContainer, jn as renderField, Ui as renderForm, Es as renderInlineMatchUp, hi as renderMatchUp, mh as renderMenu, An as renderOptions, Ar as renderParticipant, Rn as renderParticipantInput, gi as renderRound, Mr as renderRoundHeader, Bi as renderSchematicMatchUp, Vi as renderSchematicRound, Hi as renderSchematicStructure, jV as renderScorecard, _i as renderStructure, MV as renderTeamVsHeader, Ex as requestMagicLink, Fs as resetScoringConfig, Mh as resolveCourtSport, Gb as resolveEventStatus, ji as resolvePublishedComposition, zg as resolveTournamentStatus, Cu as scoringModal, dj as selectItem, Ps as setScoringConfig, nc as shouldApplySmartComplement, ic as shouldCreateNextSet, rc as shouldShowTiebreak, zP as showCourtAvailabilityModal, wx as signup, jh as sportFromMatchUpFormat, jL as standardTemplates, rS as syncClearVisibility, bh as tennisCourt, vh as tipster, Sj as toggleOverlay, iR as topologyToDrawOptions, Wv as totalBuckets, Zm as updateHeadingSelect, NV as updateTieScore, Xm as updateToolbarState, nN as validateProfile, $G as validateSchedulingPolicy, GI as validateTopology, Dn as validator, Qx as validators, Tx as verifyExisting, nS as wrapSearchWithClear };