courthive-components 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 (287) hide show
  1. package/dist/assets/team-logos/index.d.ts +9 -0
  2. package/dist/components/burstChart/burstChart.d.ts +108 -0
  3. package/dist/components/burstChart/matchUpTransform.d.ts +11 -0
  4. package/dist/components/burstChart/textHelpers.d.ts +11 -0
  5. package/dist/components/button/barButton.d.ts +1 -0
  6. package/dist/components/button/cvaButton.d.ts +8 -0
  7. package/dist/components/button/dropDownButton.d.ts +5 -0
  8. package/dist/components/categories/ageCategory/ageCategory.d.ts +54 -0
  9. package/dist/components/categories/ageCategory/ageCategoryLogic.d.ts +55 -0
  10. package/dist/components/categories/category/category.d.ts +47 -0
  11. package/dist/components/composition-editor/compositionEditor.d.ts +6 -0
  12. package/dist/components/composition-editor/compositionEditorStore.d.ts +24 -0
  13. package/dist/components/composition-editor/compositionEditorTypes.d.ts +37 -0
  14. package/dist/components/composition-editor/compositionPreview.d.ts +2 -0
  15. package/dist/components/composition-editor/scaleConstants.d.ts +7 -0
  16. package/dist/components/composition-editor/sections/displaySection.d.ts +3 -0
  17. package/dist/components/composition-editor/sections/fieldBuilders.d.ts +20 -0
  18. package/dist/components/composition-editor/sections/layoutSection.d.ts +3 -0
  19. package/dist/components/composition-editor/sections/participantSection.d.ts +3 -0
  20. package/dist/components/composition-editor/sections/placeholderSection.d.ts +3 -0
  21. package/dist/components/composition-editor/sections/scaleSection.d.ts +3 -0
  22. package/dist/components/composition-editor/sections/scoreSection.d.ts +3 -0
  23. package/dist/components/composition-editor/sections/sectionBuilder.d.ts +8 -0
  24. package/dist/components/composition-editor/sections/themeSection.d.ts +3 -0
  25. package/dist/components/composition-editor/styles.d.ts +26 -0
  26. package/dist/components/controlBar/controlBar.d.ts +11 -0
  27. package/dist/components/controlBar/toggleOverlay.d.ts +3 -0
  28. package/dist/components/courts/courts.d.ts +7 -0
  29. package/dist/components/courts/index.d.ts +1 -0
  30. package/dist/components/drawer/drawer.d.ts +14 -0
  31. package/dist/components/flightProfile/flightProfileLogic.d.ts +51 -0
  32. package/dist/components/flightProfile/flightProfileNew.d.ts +34 -0
  33. package/dist/components/flightProfile/getFlightProfileFormItems.d.ts +13 -0
  34. package/dist/components/flightProfile/getFlightProfileFormRelationships.d.ts +1 -0
  35. package/dist/components/forms/createMultiSelect.d.ts +34 -0
  36. package/dist/components/forms/renderButtons.d.ts +3 -0
  37. package/dist/components/forms/renderField.d.ts +7 -0
  38. package/dist/components/forms/renderForm.d.ts +1 -0
  39. package/dist/components/forms/renderMenu.d.ts +3 -0
  40. package/dist/components/forms/renderValidator.d.ts +113 -0
  41. package/dist/components/forms/styles.d.ts +0 -0
  42. package/dist/components/generateRound.d.ts +6 -0
  43. package/dist/components/inline-scoring/engineToMatchUp.d.ts +6 -0
  44. package/dist/components/inline-scoring/index.d.ts +5 -0
  45. package/dist/components/inline-scoring/inlineScoringFooter.d.ts +18 -0
  46. package/dist/components/inline-scoring/inlineScoringManager.d.ts +49 -0
  47. package/dist/components/inline-scoring/inlineScoringTypes.d.ts +40 -0
  48. package/dist/components/inline-scoring/renderInlineMatchUp.d.ts +27 -0
  49. package/dist/components/interactive-scoring/buildInteractiveScoringShell.d.ts +28 -0
  50. package/dist/components/interactive-scoring/index.d.ts +2 -0
  51. package/dist/components/interactive-scoring/types.d.ts +60 -0
  52. package/dist/components/matchUpFormat/matchUpFormat.d.ts +81 -0
  53. package/dist/components/matchUpFormat/matchUpFormatLogic.d.ts +112 -0
  54. package/dist/components/modal/cmodal.d.ts +30 -0
  55. package/dist/components/modal/cmodalStyles.d.ts +8 -0
  56. package/dist/components/modal/compositionEditorModal.d.ts +46 -0
  57. package/dist/components/modal/generateTeamsModal.d.ts +26 -0
  58. package/dist/components/modal/mockParticipants.d.ts +91 -0
  59. package/dist/components/modal/scheduleCellConfigModal.d.ts +44 -0
  60. package/dist/components/modal/selectItem.d.ts +24 -0
  61. package/dist/components/notes-toolbar/notesToolbar.d.ts +20 -0
  62. package/dist/components/policy-catalog/controller/policyCatalogControl.d.ts +18 -0
  63. package/dist/components/policy-catalog/domain/catalogProjections.d.ts +11 -0
  64. package/dist/components/policy-catalog/domain/policyDefaults.d.ts +26 -0
  65. package/dist/components/policy-catalog/domain/utils.d.ts +4 -0
  66. package/dist/components/policy-catalog/editors/ranking/domain/emptyRankingPolicy.d.ts +2 -0
  67. package/dist/components/policy-catalog/editors/ranking/domain/rankingProjections.d.ts +32 -0
  68. package/dist/components/policy-catalog/editors/ranking/index.d.ts +9 -0
  69. package/dist/components/policy-catalog/editors/ranking/rankingPointsEditorControl.d.ts +27 -0
  70. package/dist/components/policy-catalog/editors/ranking/rankingPointsEditorPanel.d.ts +8 -0
  71. package/dist/components/policy-catalog/editors/ranking/rankingPointsEditorStore.d.ts +53 -0
  72. package/dist/components/policy-catalog/editors/ranking/sections/aggregationSection.d.ts +6 -0
  73. package/dist/components/policy-catalog/editors/ranking/sections/bonusPointsRow.d.ts +6 -0
  74. package/dist/components/policy-catalog/editors/ranking/sections/metadataSection.d.ts +6 -0
  75. package/dist/components/policy-catalog/editors/ranking/sections/perWinPointsRow.d.ts +6 -0
  76. package/dist/components/policy-catalog/editors/ranking/sections/positionPointsTable.d.ts +6 -0
  77. package/dist/components/policy-catalog/editors/ranking/sections/profileCard.d.ts +6 -0
  78. package/dist/components/policy-catalog/editors/ranking/sections/qualityWinSection.d.ts +6 -0
  79. package/dist/components/policy-catalog/editors/ranking/sections/scopeBadges.d.ts +2 -0
  80. package/dist/components/policy-catalog/editors/ranking/sections/scopeEditor.d.ts +6 -0
  81. package/dist/components/policy-catalog/editors/ranking/styles.d.ts +25 -0
  82. package/dist/components/policy-catalog/editors/ranking/types.d.ts +146 -0
  83. package/dist/components/policy-catalog/editors/scheduling/domain/schedulingProjections.d.ts +5 -0
  84. package/dist/components/policy-catalog/editors/scheduling/domain/schedulingValidation.d.ts +2 -0
  85. package/dist/components/policy-catalog/editors/scheduling/index.d.ts +11 -0
  86. package/dist/components/policy-catalog/editors/scheduling/schedulingEditorControl.d.ts +26 -0
  87. package/dist/components/policy-catalog/editors/scheduling/schedulingEditorPanel.d.ts +6 -0
  88. package/dist/components/policy-catalog/editors/scheduling/schedulingEditorStore.d.ts +32 -0
  89. package/dist/components/policy-catalog/editors/scheduling/sections/averageTimesSection.d.ts +6 -0
  90. package/dist/components/policy-catalog/editors/scheduling/sections/dailyLimitsSection.d.ts +6 -0
  91. package/dist/components/policy-catalog/editors/scheduling/sections/defaultTimesSection.d.ts +6 -0
  92. package/dist/components/policy-catalog/editors/scheduling/sections/formatTimeRow.d.ts +22 -0
  93. package/dist/components/policy-catalog/editors/scheduling/sections/modificationFlagsSection.d.ts +6 -0
  94. package/dist/components/policy-catalog/editors/scheduling/sections/recoveryTimesSection.d.ts +6 -0
  95. package/dist/components/policy-catalog/editors/scheduling/styles.d.ts +27 -0
  96. package/dist/components/policy-catalog/editors/scheduling/types.d.ts +65 -0
  97. package/dist/components/policy-catalog/engine/policyCatalogStore.d.ts +25 -0
  98. package/dist/components/policy-catalog/index.d.ts +22 -0
  99. package/dist/components/policy-catalog/types.d.ts +57 -0
  100. package/dist/components/policy-catalog/ui/editorShell.d.ts +11 -0
  101. package/dist/components/policy-catalog/ui/jsonEditor.d.ts +5 -0
  102. package/dist/components/policy-catalog/ui/policyCatalogLayout.d.ts +6 -0
  103. package/dist/components/policy-catalog/ui/policyCatalogPanel.d.ts +10 -0
  104. package/dist/components/policy-catalog/ui/styles.d.ts +28 -0
  105. package/dist/components/popover/tipster.d.ts +14 -0
  106. package/dist/components/print-composition-editor/printCompositionEditor.d.ts +2 -0
  107. package/dist/components/print-composition-editor/printCompositionEditorTypes.d.ts +77 -0
  108. package/dist/components/renderSchematicStructure/index.d.ts +4 -0
  109. package/dist/components/renderSchematicStructure/renderSchematicMatchUp.d.ts +26 -0
  110. package/dist/components/renderSchematicStructure/renderSchematicRound.d.ts +15 -0
  111. package/dist/components/renderSchematicStructure/renderSchematicStructure.d.ts +12 -0
  112. package/dist/components/renderStructure/isLuckyDraw.d.ts +9 -0
  113. package/dist/components/renderStructure/renderAddress.d.ts +5 -0
  114. package/dist/components/renderStructure/renderCenterInfo.d.ts +10 -0
  115. package/dist/components/renderStructure/renderContainer.d.ts +4 -0
  116. package/dist/components/renderStructure/renderFlag.d.ts +6 -0
  117. package/dist/components/renderStructure/renderFrill.d.ts +10 -0
  118. package/dist/components/renderStructure/renderGameScore.d.ts +3 -0
  119. package/dist/components/renderStructure/renderIndividual.d.ts +12 -0
  120. package/dist/components/renderStructure/renderMatchUp.d.ts +14 -0
  121. package/dist/components/renderStructure/renderParticipant.d.ts +11 -0
  122. package/dist/components/renderStructure/renderParticipantDetail.d.ts +7 -0
  123. package/dist/components/renderStructure/renderParticipantInput.d.ts +10 -0
  124. package/dist/components/renderStructure/renderPersonAttribute.d.ts +6 -0
  125. package/dist/components/renderStructure/renderRound.d.ts +17 -0
  126. package/dist/components/renderStructure/renderRoundHeader.d.ts +8 -0
  127. package/dist/components/renderStructure/renderScale.d.ts +8 -0
  128. package/dist/components/renderStructure/renderSchedule.d.ts +5 -0
  129. package/dist/components/renderStructure/renderSeeding.d.ts +6 -0
  130. package/dist/components/renderStructure/renderSide.d.ts +9 -0
  131. package/dist/components/renderStructure/renderSideScore.d.ts +16 -0
  132. package/dist/components/renderStructure/renderStatusPill.d.ts +3 -0
  133. package/dist/components/renderStructure/renderStructure.d.ts +13 -0
  134. package/dist/components/renderStructure/renderTeam.d.ts +5 -0
  135. package/dist/components/renderStructure/renderTeamLogo.d.ts +4 -0
  136. package/dist/components/renderStructure/renderTick.d.ts +3 -0
  137. package/dist/components/schedule-page/controller/schedulePageControl.d.ts +21 -0
  138. package/dist/components/schedule-page/domain/activeStrip.d.ts +72 -0
  139. package/dist/components/schedule-page/domain/matchUpCatalogProjections.d.ts +4 -0
  140. package/dist/components/schedule-page/domain/scheduleIssues.d.ts +2 -0
  141. package/dist/components/schedule-page/domain/utils.d.ts +5 -0
  142. package/dist/components/schedule-page/engine/schedulePageStore.d.ts +36 -0
  143. package/dist/components/schedule-page/index.d.ts +28 -0
  144. package/dist/components/schedule-page/types.d.ts +221 -0
  145. package/dist/components/schedule-page/ui/activeStrip.d.ts +46 -0
  146. package/dist/components/schedule-page/ui/courtGridSlot.d.ts +8 -0
  147. package/dist/components/schedule-page/ui/dateStrip.d.ts +5 -0
  148. package/dist/components/schedule-page/ui/inspectorPanel.d.ts +2 -0
  149. package/dist/components/schedule-page/ui/issuesPanel.d.ts +2 -0
  150. package/dist/components/schedule-page/ui/matchUpCard.d.ts +5 -0
  151. package/dist/components/schedule-page/ui/matchUpCatalog.d.ts +11 -0
  152. package/dist/components/schedule-page/ui/scheduleCellTypeAhead.d.ts +23 -0
  153. package/dist/components/schedule-page/ui/scheduleGridCell.d.ts +8 -0
  154. package/dist/components/schedule-page/ui/schedulePageLayout.d.ts +18 -0
  155. package/dist/components/schedule-page/ui/styles.d.ts +41 -0
  156. package/dist/components/scheduling-profile/controller/schedulingProfileControl.d.ts +14 -0
  157. package/dist/components/scheduling-profile/domain/catalogProjections.d.ts +16 -0
  158. package/dist/components/scheduling-profile/domain/dndApply.d.ts +2 -0
  159. package/dist/components/scheduling-profile/domain/issueIndex.d.ts +2 -0
  160. package/dist/components/scheduling-profile/domain/profileProjections.d.ts +6 -0
  161. package/dist/components/scheduling-profile/domain/utils.d.ts +7 -0
  162. package/dist/components/scheduling-profile/domain/validateProfile.d.ts +13 -0
  163. package/dist/components/scheduling-profile/engine/profileStore.d.ts +27 -0
  164. package/dist/components/scheduling-profile/index.d.ts +25 -0
  165. package/dist/components/scheduling-profile/types.d.ts +197 -0
  166. package/dist/components/scheduling-profile/ui/cardPopover.d.ts +11 -0
  167. package/dist/components/scheduling-profile/ui/dateStrip.d.ts +5 -0
  168. package/dist/components/scheduling-profile/ui/inspectorPanel.d.ts +2 -0
  169. package/dist/components/scheduling-profile/ui/issuesPanel.d.ts +5 -0
  170. package/dist/components/scheduling-profile/ui/roundCard.d.ts +12 -0
  171. package/dist/components/scheduling-profile/ui/roundCatalog.d.ts +8 -0
  172. package/dist/components/scheduling-profile/ui/schedulingProfileLayout.d.ts +15 -0
  173. package/dist/components/scheduling-profile/ui/styles.d.ts +46 -0
  174. package/dist/components/scheduling-profile/ui/venueBoard.d.ts +7 -0
  175. package/dist/components/scorecard/index.d.ts +2 -0
  176. package/dist/components/scorecard/renderScorecard.d.ts +26 -0
  177. package/dist/components/scoring/approaches/dialPadApproach.d.ts +2 -0
  178. package/dist/components/scoring/approaches/dialPadLogic.d.ts +12 -0
  179. package/dist/components/scoring/approaches/dynamicSetsApproach.d.ts +2 -0
  180. package/dist/components/scoring/approaches/freeScoreApproach.d.ts +2 -0
  181. package/dist/components/scoring/approaches/inlineScoringApproach.d.ts +2 -0
  182. package/dist/components/scoring/config.d.ts +28 -0
  183. package/dist/components/scoring/index.d.ts +6 -0
  184. package/dist/components/scoring/logic/dynamicSetsLogic.d.ts +124 -0
  185. package/dist/components/scoring/scoringModal.d.ts +2 -0
  186. package/dist/components/scoring/types.d.ts +60 -0
  187. package/dist/components/scoring/utils/scoreFormatters.d.ts +12 -0
  188. package/dist/components/scoring/utils/scoreValidator.d.ts +16 -0
  189. package/dist/components/scoring/utils/setExpansionLogic.d.ts +24 -0
  190. package/dist/components/temporal-grid/controller/temporalGridControl.d.ts +137 -0
  191. package/dist/components/temporal-grid/controller/viewProjections.d.ts +220 -0
  192. package/dist/components/temporal-grid/engine/viewState.d.ts +34 -0
  193. package/dist/components/temporal-grid/index.d.ts +18 -0
  194. package/dist/components/temporal-grid/timeline/CourtTimeline.d.ts +77 -0
  195. package/dist/components/temporal-grid/timeline/InteractionManager.d.ts +59 -0
  196. package/dist/components/temporal-grid/timeline/ItemRenderer.d.ts +35 -0
  197. package/dist/components/temporal-grid/timeline/RowLayout.d.ts +38 -0
  198. package/dist/components/temporal-grid/timeline/TimeAxis.d.ts +41 -0
  199. package/dist/components/temporal-grid/timeline/TimeScale.d.ts +106 -0
  200. package/dist/components/temporal-grid/timeline/types.d.ts +124 -0
  201. package/dist/components/temporal-grid/ui/blockPopover.d.ts +29 -0
  202. package/dist/components/temporal-grid/ui/courtAvailabilityModal.d.ts +29 -0
  203. package/dist/components/temporal-grid/ui/modernTimePicker.d.ts +46 -0
  204. package/dist/components/temporal-grid/ui/statsBar.d.ts +21 -0
  205. package/dist/components/temporal-grid/ui/temporalGrid.d.ts +149 -0
  206. package/dist/components/temporal-grid/ui/viewToolbar.d.ts +37 -0
  207. package/dist/components/topology-builder/controller/topologyBuilderControl.d.ts +19 -0
  208. package/dist/components/topology-builder/domain/feedRounds.d.ts +42 -0
  209. package/dist/components/topology-builder/domain/generateDrawFromTopology.d.ts +16 -0
  210. package/dist/components/topology-builder/domain/playoffProfilesCache.d.ts +16 -0
  211. package/dist/components/topology-builder/domain/previewGenerator.d.ts +9 -0
  212. package/dist/components/topology-builder/domain/templates.d.ts +2 -0
  213. package/dist/components/topology-builder/domain/topologyToDrawOptions.d.ts +6 -0
  214. package/dist/components/topology-builder/domain/topologyValidator.d.ts +8 -0
  215. package/dist/components/topology-builder/engine/topologyStore.d.ts +30 -0
  216. package/dist/components/topology-builder/index.d.ts +23 -0
  217. package/dist/components/topology-builder/types.d.ts +59 -0
  218. package/dist/components/topology-builder/ui/edgeEditor.d.ts +7 -0
  219. package/dist/components/topology-builder/ui/nodeEditor.d.ts +9 -0
  220. package/dist/components/topology-builder/ui/structureCard.d.ts +39 -0
  221. package/dist/components/topology-builder/ui/toolbar.d.ts +15 -0
  222. package/dist/components/topology-builder/ui/topologyBuilderLayout.d.ts +7 -0
  223. package/dist/components/topology-builder/ui/topologyCanvas.d.ts +10 -0
  224. package/dist/components/validators/numericRange.d.ts +1 -0
  225. package/dist/components/validators/numericValidator.d.ts +1 -0
  226. package/dist/compositions/compositions.d.ts +2 -0
  227. package/dist/compositions/lineHeights.d.ts +5 -0
  228. package/dist/compositions/resolvePublishedComposition.d.ts +12 -0
  229. package/dist/constants/matchUpFormats.d.ts +34 -0
  230. package/dist/courthive-components.css +1 -1
  231. package/dist/courthive-components.es.js +803 -626
  232. package/dist/courthive-components.umd.js +4 -4
  233. package/dist/data/componentConstants.d.ts +1 -0
  234. package/dist/data/generateEventData.d.ts +15 -0
  235. package/dist/data/generateMatchUps.d.ts +25 -0
  236. package/dist/helpers/createTypeAhead.d.ts +14 -0
  237. package/dist/helpers/drawStateManager.d.ts +91 -0
  238. package/dist/helpers/getAttr.d.ts +4 -0
  239. package/dist/helpers/typeOf.d.ts +4 -0
  240. package/dist/index.d.ts +80 -4006
  241. package/dist/styles/centerInfoStyle.d.ts +6 -0
  242. package/dist/styles/containerStyle.d.ts +1 -0
  243. package/dist/styles/flagStyle.d.ts +3 -0
  244. package/dist/styles/getChevronStyle.d.ts +4 -0
  245. package/dist/styles/getLinkStyle.d.ts +25 -0
  246. package/dist/styles/getMatchUpStyle.d.ts +4 -0
  247. package/dist/styles/getSelectedMatchUpStyle.d.ts +1 -0
  248. package/dist/styles/groupNameStyle.d.ts +1 -0
  249. package/dist/styles/groupSeparatorStyle.d.ts +4 -0
  250. package/dist/styles/matchUpContainerStyle.d.ts +1 -0
  251. package/dist/styles/participantDetailStyle.d.ts +1 -0
  252. package/dist/styles/participantStyle.d.ts +17 -0
  253. package/dist/styles/pillStyle.d.ts +3 -0
  254. package/dist/styles/resultStyles.d.ts +4 -0
  255. package/dist/styles/roundContainerStyle.d.ts +1 -0
  256. package/dist/styles/roundHeaderStyle.d.ts +1 -0
  257. package/dist/styles/roundStyle.d.ts +3 -0
  258. package/dist/styles/scaleStyle.d.ts +3 -0
  259. package/dist/styles/schedulingStyle.d.ts +1 -0
  260. package/dist/styles/scoreStyles.d.ts +9 -0
  261. package/dist/styles/scoreWrapperStyle.d.ts +4 -0
  262. package/dist/styles/seedStyle.d.ts +1 -0
  263. package/dist/styles/sideStyles.d.ts +3 -0
  264. package/dist/styles/structureStyle.d.ts +1 -0
  265. package/dist/styles/teamLogoStyle.d.ts +1 -0
  266. package/dist/styles/themes/australianTheme.d.ts +1 -0
  267. package/dist/styles/themes/basicCardTheme.d.ts +1 -0
  268. package/dist/styles/themes/basicTheme.d.ts +1 -0
  269. package/dist/styles/themes/createTheme.d.ts +5 -0
  270. package/dist/styles/themes/frenchTheme.d.ts +1 -0
  271. package/dist/styles/themes/index.d.ts +7 -0
  272. package/dist/styles/themes/itfTheme.d.ts +1 -0
  273. package/dist/styles/themes/usOpenTheme.d.ts +1 -0
  274. package/dist/styles/themes/wimbledonTheme.d.ts +1 -0
  275. package/dist/tools/freeScore/freeScore.d.ts +79 -0
  276. package/dist/types.d.ts +321 -0
  277. package/dist/utilities/isElement.d.ts +1 -0
  278. package/dist/validators/dateValidator.d.ts +1 -0
  279. package/dist/validators/emailValidator.d.ts +1 -0
  280. package/dist/validators/index.d.ts +7 -0
  281. package/dist/validators/nameValidator.d.ts +1 -0
  282. package/dist/validators/numericRange.d.ts +1 -0
  283. package/dist/validators/numericValidator.d.ts +1 -0
  284. package/dist/validators/passwordValidator.d.ts +1 -0
  285. package/dist/validators/wordValidator.d.ts +1 -0
  286. package/dist/version.d.ts +1 -0
  287. package/package.json +5 -5
package/dist/index.d.ts CHANGED
@@ -1,4006 +1,80 @@
1
- import { Instance } from 'tippy.js';
2
- import { temporal } from 'tods-competition-factory';
3
- import { TemporalEngine } from 'tods-competition-factory';
4
-
5
- export declare function activateScheduleCellTypeAhead({ cell, listProvider, onSelect, onCancel }: ScheduleCellTypeAheadOptions): {
6
- destroy: () => void;
7
- };
8
-
9
- declare interface Address {
10
- addressType?: string;
11
- city?: string;
12
- state?: string;
13
- country?: string;
14
- countryCode?: string;
15
- postalCode?: string;
16
- }
17
-
18
- export declare interface AgeCategoryConfig {
19
- labels?: {
20
- title?: string;
21
- consideredDateLabel?: string;
22
- typeLabel?: string;
23
- ageLabel?: string;
24
- standardCodesLabel?: string;
25
- };
26
- options?: {
27
- ages?: number[];
28
- categoryTypes?: string[];
29
- };
30
- preDefinedCodes?: Array<{
31
- code: string;
32
- text: string;
33
- }>;
34
- defaultConsideredDate?: string;
35
- }
36
-
37
- export declare function applyDropCommit(profileDraft: SchedulingProfile, drag: DragPayload, drop: DropTarget): DropResult;
38
-
39
- export declare interface AverageTimeEntry {
40
- categoryNames?: string[];
41
- categoryTypes?: string[];
42
- minutes: MinutesEntry;
43
- }
44
-
45
- export declare function badmintonCourt(className: string): SVGSVGElement;
46
-
47
- export declare function barButton(itemConfig: any): HTMLButtonElement;
48
-
49
- export declare function baseballDiamond(className: string): SVGSVGElement;
50
-
51
- export declare function basketballCourt(className: string): SVGSVGElement;
52
-
53
- /**
54
- * Color scheme for block types
55
- */
56
- declare interface BlockColorScheme {
57
- AVAILABLE: string;
58
- BLOCKED: string;
59
- PRACTICE: string;
60
- MAINTENANCE: string;
61
- RESERVED: string;
62
- CLOSED: string;
63
- SCHEDULED: string;
64
- SOFT_BLOCK: string;
65
- HARD_BLOCK: string;
66
- LOCKED: string;
67
- UNSPECIFIED: string;
68
- }
69
-
70
- declare interface BlockPopoverManager {
71
- show(target: HTMLElement, options: BlockPopoverOptions): void;
72
- showForEngineBlock(target: HTMLElement, options: EngineBlockPopoverOptions): void;
73
- destroy(): void;
74
- isActiveFor(itemId: string): boolean;
75
- }
76
-
77
- declare interface BlockPopoverOptions {
78
- itemId: string;
79
- blockTypes: Array<{
80
- type: string;
81
- color: string;
82
- label: string;
83
- }>;
84
- currentType?: string;
85
- startTime?: string;
86
- endTime?: string;
87
- onTypeSelected: (type: string) => void;
88
- onAdjustTime?: (startTime: string, endTime: string) => void;
89
- onDelete?: () => void;
90
- }
91
-
92
- declare type BlockType = temporal.BlockType;
93
-
94
- declare type BlockType_2 = temporal.BlockType;
95
-
96
- export declare function buildCourtGridSlot(courtGridElement: HTMLElement | undefined, callbacks: CourtGridSlotCallbacks, options?: CourtGridSlotOptions): UIPanel_3<SchedulePageState>;
97
-
98
- export declare function buildDateStrip(callbacks: DateStripCallbacks): UIPanel<ProfileStoreState>;
99
-
100
- export declare function buildEdgeEditor(callbacks: EdgeEditorCallbacks): UIPanel_2<TopologyState>;
101
-
102
- export declare function buildEditorShell(callbacks: EditorShellCallbacks): EditorShellPanel;
103
-
104
- export declare function buildInspectorPanel(): UIPanel<ProfileStoreState>;
105
-
106
- /**
107
- * Build a mobile-first full-page interactive scoring shell around a
108
- * `ScoringEngine` (wrapped by the existing `InlineScoringManager`).
109
- *
110
- * This is the courthive-public Phase 2 scoring UI: anonymous,
111
- * local-only, mobile-first. It does NOT persist state itself —
112
- * consumers subscribe to `stateChanged` events and handle
113
- * persistence (IndexedDB in courthive-public's case).
114
- *
115
- * Phase 2 targets standard tennis matchUpFormats (`SET3-S:6/TB7`,
116
- * `SET5-S:6/TB7`, etc.). INTENNSE bolt scoring, pickleball score
117
- * caps, doubles lineup changes, and other format-specific behaviors
118
- * are deferred to Phase 2.5+.
119
- *
120
- * The DOM structure:
121
- * ```
122
- * .chc-interactive-scoring-shell
123
- * .chc-iss-header (side names + format indicator)
124
- * .chc-iss-score-display (current set scores + game score)
125
- * .chc-iss-point-buttons (big Side 1 / Side 2 point-won buttons)
126
- * .chc-iss-control-bar (undo, reset, complete indicator)
127
- * ```
128
- *
129
- * All styling lives in `interactive-scoring.css` using the shared
130
- * `--sp-*` / `--chc-*` theme variables.
131
- */
132
- export declare function buildInteractiveScoringShell(config: InteractiveScoringShellConfig): InteractiveScoringShell;
133
-
134
- export declare function buildIssueIndex(results: ValidationResult[]): IssueIndex;
135
-
136
- export declare function buildIssuesPanel(callbacks: IssuesPanelCallbacks): UIPanel<ProfileStoreState>;
137
-
138
- export declare function buildJsonEditor(config: {
139
- initialData: Record<string, unknown>;
140
- onChange: (data: Record<string, unknown>) => void;
141
- }): PolicyEditorInstance;
142
-
143
- export declare function buildMatchUpCard(item: CatalogMatchUpItem, callbacks: MatchUpCardCallbacks): HTMLElement;
144
-
145
- export declare function buildMatchUpCatalog(callbacks: MatchUpCatalogCallbacks): UIPanel_3<SchedulePageState>;
146
-
147
- export declare function buildNodeEditor(callbacks: NodeEditorCallbacks): UIPanel_2<TopologyState>;
148
-
149
- export declare function buildPolicyCatalogLayout(panels: {
150
- catalogPanel: UIPanel_4<PolicyCatalogState>;
151
- editorShell: EditorShellPanel;
152
- }): UIPanel_4<PolicyCatalogState>;
153
-
154
- export declare function buildPolicyCatalogPanel(callbacks: PolicyCatalogPanelCallbacks): UIPanel_4<PolicyCatalogState>;
155
-
156
- export declare function buildRoundCard(data: RoundCardData, callbacks: RoundCardCallbacks): HTMLElement;
157
-
158
- export declare function buildRoundCatalog(callbacks: RoundCatalogCallbacks): UIPanel<ProfileStoreState>;
159
-
160
- export declare function buildScheduleDateStrip(callbacks: DateStripCallbacks_2): UIPanel_3<SchedulePageState>;
161
-
162
- export declare function buildScheduleGridCell(data: ScheduleCellData, config?: ScheduleCellConfig): HTMLElement;
163
-
164
- export declare function buildScheduleInspectorPanel(): UIPanel_3<SchedulePageState>;
165
-
166
- export declare function buildScheduleIssueIndex(issues: ScheduleIssue[]): ScheduleIssueIndex;
167
-
168
- export declare function buildScheduleIssuesPanel(): UIPanel_3<SchedulePageState>;
169
-
170
- export declare function buildSchedulePageLayout(panels: SchedulePageLayoutPanels, callbacks: SchedulePageLayoutCallbacks, options?: {
171
- hideLeft?: boolean;
172
- catalogSide?: 'left' | 'right';
173
- }): {
174
- element: HTMLElement;
175
- update: (state: SchedulePageState) => void;
176
- };
177
-
178
- export declare function buildSchedulingEditorPanel(store: SchedulingEditorStore, config: SchedulingEditorConfig): {
179
- element: HTMLElement;
180
- update(state: SchedulingEditorState): void;
181
- };
182
-
183
- export declare function buildSchedulingProfileLayout(panels: LayoutPanels, options?: {
184
- hideLeft?: boolean;
185
- catalogSide?: 'left' | 'right';
186
- }): {
187
- element: HTMLElement;
188
- update: (state: ProfileStoreState) => void;
189
- };
190
-
191
- /**
192
- * Build a SetScore object from input values
193
- * Assigns winningSide if set is complete
194
- */
195
- export declare function buildSetScore(setIndex: number, side1Value: string, side2Value: string, tiebreakValue: string | undefined, config: MatchUpConfig): SetScore;
196
-
197
- export declare function buildStructureCard(node: TopologyNode, callbacks: StructureCardCallbacks, isSelected: boolean, hasWinnerLink: boolean, roundAnnotations?: RoundAnnotation[], warnings?: string[], advanceInfo?: string, positionChips?: PositionChip[]): HTMLElement;
198
-
199
- export declare function buildToolbar(callbacks: ToolbarCallbacks, templates: TopologyTemplate[], options?: ToolbarOptions): UIPanel_2<TopologyState>;
200
-
201
- export declare function buildTopologyBuilderLayout({ toolbar, canvas, nodeEditor, edgeEditor }: {
202
- toolbar: UIPanel_2<TopologyState>;
203
- canvas: UIPanel_2<TopologyState>;
204
- nodeEditor: UIPanel_2<TopologyState>;
205
- edgeEditor: UIPanel_2<TopologyState>;
206
- }): UIPanel_2<TopologyState>;
207
-
208
- export declare function buildTopologyCanvas(callbacks: CanvasCallbacks): UIPanel_2<TopologyState>;
209
-
210
- export declare function buildVenueBoard(callbacks: VenueBoardCallbacks): UIPanel<ProfileStoreState>;
211
-
212
- /**
213
- * Factory function to create a burst chart renderer.
214
- * Accepts either SunburstDrawData (new) or TournamentDraw (legacy, auto-converted).
215
- */
216
- export declare function burstChart(options?: BurstChartOptions): {
217
- render: (container: HTMLElement, drawData: SunburstDrawData, title: string) => BurstChartInstance;
218
- };
219
-
220
- export declare interface BurstChartEventHandlers {
221
- clickSegment?: (data: SegmentData) => void;
222
- clickCenter?: () => void;
223
- }
224
-
225
- /** Handle returned by render() for controlling the chart after rendering */
226
- export declare interface BurstChartInstance {
227
- /** Highlight all segments belonging to a player. Returns count of highlighted nodes. Omit name to clear. */
228
- highlightPlayer: (playerName?: string) => number;
229
- /** Show or hide the entire chart SVG */
230
- hide: (hidden: boolean) => void;
231
- }
232
-
233
- export declare interface BurstChartOptions {
234
- width?: number;
235
- height?: number;
236
- title?: string;
237
- colorBySeeds?: boolean;
238
- countryCodes?: Record<string, string>;
239
- eventHandlers?: BurstChartEventHandlers;
240
- textScaleFactor?: number;
241
- }
242
-
243
- /**
244
- * Calculate the complement score for smart complement entry
245
- * Returns null if no predictable complement exists
246
- *
247
- * @param digit - The digit entered (0-9)
248
- * @param setFormat - The format for this set
249
- * @returns Complement value or null if digit >= setTo (no predictable complement)
250
- */
251
- export declare function calculateComplement(digit: number, setFormat?: SetFormat): number | null;
252
-
253
- declare interface CanvasCallbacks {
254
- onSelectNode: (nodeId: string | null) => void;
255
- onSelectEdge: (edgeId: string | null) => void;
256
- onDoubleClickNode?: (nodeId: string) => void;
257
- onMoveNode: (nodeId: string, x: number, y: number) => void;
258
- onCreateEdge: (sourceNodeId: string, targetNodeId: string, linkType: 'WINNER' | 'LOSER' | 'POSITION') => void;
259
- onPortMouseDown: (nodeId: string, portType: 'winner' | 'loser') => void;
260
- }
261
-
262
- declare interface CardPopoverCallbacks {
263
- onDelete: (locator: RoundLocator) => void;
264
- onSetNotBeforeTime: (locator: RoundLocator) => void;
265
- }
266
-
267
- declare interface CardPopoverManager {
268
- show(target: HTMLElement, locator: RoundLocator): void;
269
- destroy(): void;
270
- isActiveFor(locator: RoundLocator): boolean;
271
- }
272
-
273
- declare interface CatalogDragPayload {
274
- type: 'CATALOG_ROUND';
275
- roundRef: CatalogRoundItem;
276
- }
277
-
278
- export declare interface CatalogFilters {
279
- eventType?: string;
280
- eventName?: string;
281
- drawName?: string;
282
- gender?: string;
283
- roundName?: string;
284
- }
285
-
286
- export declare type CatalogGroupBy = 'event' | 'draw' | 'round';
287
-
288
- export declare interface CatalogMatchUpDragPayload {
289
- type: 'CATALOG_MATCHUP';
290
- matchUp: CatalogMatchUpItem;
291
- }
292
-
293
- export declare interface CatalogMatchUpItem {
294
- matchUpId: string;
295
- eventId: string;
296
- eventName: string;
297
- drawId: string;
298
- drawName?: string;
299
- structureId: string;
300
- roundNumber: number;
301
- roundName?: string;
302
- matchUpFormat?: string;
303
- matchUpType?: 'SINGLES' | 'DOUBLES';
304
- matchUpStatus?: string;
305
- gender?: string;
306
- sides?: MatchUpSide[];
307
- isScheduled: boolean;
308
- scheduledTime?: string;
309
- scheduledCourtName?: string;
310
- }
311
-
312
- export declare interface CatalogRoundItem {
313
- tournamentId: string;
314
- eventId: string;
315
- eventName: string;
316
- drawId: string;
317
- drawName?: string;
318
- structureId: string;
319
- structureType?: string;
320
- roundNumber: number;
321
- roundName?: string;
322
- matchCountEstimate?: number;
323
- }
324
-
325
- export declare interface Category {
326
- ageCategoryCode?: string;
327
- ageMax?: number;
328
- ageMaxDate?: string;
329
- ageMin?: number;
330
- ageMinDate?: string;
331
- ballType?: string;
332
- categoryName?: string;
333
- categoryType?: string;
334
- notes?: string;
335
- ratingMax?: number;
336
- ratingMin?: number;
337
- ratingType?: string;
338
- type?: 'AGE' | 'RATING' | 'BOTH';
339
- }
340
-
341
- export declare interface CategoryConfig {
342
- labels?: {
343
- title?: string;
344
- categoryNameLabel?: string;
345
- typeLabel?: string;
346
- ageCategoryCodeLabel?: string;
347
- ratingTypeLabel?: string;
348
- ratingMinLabel?: string;
349
- ratingMaxLabel?: string;
350
- ballTypeLabel?: string;
351
- notesLabel?: string;
352
- };
353
- options?: {
354
- types?: string[];
355
- ratingTypes?: string[];
356
- ballTypes?: string[];
357
- };
358
- defaultConsideredDate?: string;
359
- modalConfig?: any;
360
- }
361
-
362
- export declare const cModal: {
363
- close: (conditional?: boolean) => void;
364
- open: ({ title, content, buttons, footer, config, onClose }?: ModalParams) => {
365
- setContent: ({ content: newContent, config }: {
366
- content?: ModalContent;
367
- config?: ModalConfig;
368
- }) => void;
369
- setButtons: ({ buttons, config }: {
370
- buttons: ModalButton[];
371
- config?: ModalConfig;
372
- }) => void;
373
- update: ({ content: newContent, buttons, title, config: newConfig, onClose }: {
374
- content?: ModalContent;
375
- buttons?: ModalButton[];
376
- title?: string;
377
- config?: ModalConfig;
378
- onClose?: (params: {
379
- content?: any;
380
- }) => void;
381
- }) => void;
382
- };
383
- };
384
-
385
- declare interface Composition {
386
- theme: string;
387
- configuration?: Configuration;
388
- }
389
-
390
- export declare interface CompositionEditorConfig {
391
- /** Initial composition to edit */
392
- composition?: Composition;
393
- /** Name for display/save */
394
- compositionName?: string;
395
- /** View-only mode */
396
- readOnly?: boolean;
397
- /** Called when user saves */
398
- onSave?: (result: SavedComposition) => void;
399
- /** Called on every change (live preview) */
400
- onChange?: (composition: Composition) => void;
401
- /** Restrict available theme choices */
402
- availableThemes?: string[];
403
- }
404
-
405
- export declare type CompositionEditorListener = (state: CompositionEditorState) => void;
406
-
407
- export declare interface CompositionEditorOptions {
408
- initialPreset?: string;
409
- initialHeader?: Partial<HeaderConfig>;
410
- initialFooter?: Partial<FooterConfig>;
411
- onApply?: (result: CompositionEditorResult) => void;
412
- }
413
-
414
- /** Standard panel interface */
415
- export declare interface CompositionEditorPanel {
416
- element: HTMLElement;
417
- update(state: CompositionEditorState): void;
418
- }
419
-
420
- export declare interface CompositionEditorResult {
421
- header: HeaderConfig;
422
- footer: FooterConfig;
423
- preset?: string;
424
- }
425
-
426
- export declare type CompositionEditorSectionId = 'theme' | 'display' | 'score' | 'participant' | 'placeholder' | 'scale' | 'layout';
427
-
428
- export declare interface CompositionEditorState {
429
- compositionName: string;
430
- theme: string;
431
- configuration: Configuration;
432
- expandedSections: Set<CompositionEditorSectionId>;
433
- isDirty: boolean;
434
- readOnly: boolean;
435
- }
436
-
437
- export declare class CompositionEditorStore {
438
- private state;
439
- private readonly listeners;
440
- private readonly config;
441
- constructor(config: CompositionEditorConfig);
442
- getState(): CompositionEditorState;
443
- subscribe(listener: CompositionEditorListener): () => void;
444
- toggleSection(sectionId: CompositionEditorSectionId): void;
445
- setTheme(theme: string): void;
446
- setCompositionName(name: string): void;
447
- setConfigField<K extends keyof Configuration>(key: K, value: Configuration[K]): void;
448
- /** Update a nested object field (e.g., gameScore, placeHolders, scaleAttributes) */
449
- setConfigNestedField<K extends keyof Configuration>(key: K, nestedKey: string, value: unknown): void;
450
- /** Replace the entire configuration (e.g., loading a preset) */
451
- setConfiguration(configuration: Configuration): void;
452
- /** Load a full composition (theme + config + name) */
453
- loadComposition(name: string, theme: string, configuration: Configuration): void;
454
- resetToInitial(): void;
455
- private setState;
456
- private emit;
457
- private notifyChange;
458
- }
459
-
460
- export declare const compositions: Record<string, Composition>;
461
-
462
- declare interface Configuration {
463
- flags?: boolean;
464
- flag?: boolean;
465
- teamLogo?: boolean;
466
- roundHeader?: boolean;
467
- winnerChevron?: boolean;
468
- centerInfo?: boolean;
469
- resultsInfo?: boolean;
470
- scoreBox?: boolean;
471
- gameScoreOnly?: boolean;
472
- gameScore?: {
473
- position?: 'leading' | 'trailing';
474
- inverted?: boolean;
475
- };
476
- drawPositions?: boolean;
477
- allDrawPositions?: boolean;
478
- drawPositionColor?: string;
479
- bracketedSeeds?: boolean | 'square';
480
- scheduleInfo?: boolean;
481
- matchUpFooter?: boolean;
482
- showAddress?: boolean;
483
- seedingElement?: 'sup' | 'span';
484
- matchUpHover?: boolean | string;
485
- participantDetail?: string;
486
- inlineAssignment?: boolean;
487
- participantProvider?: () => Participant[];
488
- assignmentInputFontSize?: string;
489
- persistInputFields?: boolean;
490
- hasQualifying?: boolean;
491
- inlineScoring?: {
492
- mode: 'points' | 'games';
493
- showFooter?: boolean;
494
- showSituation?: boolean;
495
- canUndo?: boolean;
496
- canRedo?: boolean;
497
- isComplete?: boolean;
498
- isDirty?: boolean;
499
- situationText?: string;
500
- };
501
- useParticipantName?: boolean;
502
- genderColor?: boolean | string;
503
- winnerColor?: boolean | string;
504
- placeHolders?: {
505
- tbd?: string;
506
- bye?: string;
507
- qualifier?: string;
508
- };
509
- scaleAttributes?: {
510
- scaleColor?: string;
511
- scaleType?: string;
512
- scaleName?: string;
513
- accessor?: string;
514
- eventType?: string;
515
- fallback?: boolean;
516
- scalePosition?: 'left' | 'right';
517
- rawValue?: any;
518
- };
519
- clickAway?: boolean;
520
- backdrop?: boolean;
521
- maxWidth?: number;
522
- fontSize?: string;
523
- padding?: string;
524
- className?: string;
525
- style?: Partial<CSSStyleDeclaration>;
526
- info?: string;
527
- menu?: {
528
- menuItems: Array<{
529
- label: string;
530
- onClick: () => void;
531
- active?: boolean;
532
- }>;
533
- };
534
- title?: {
535
- padding?: string;
536
- };
537
- content?: {
538
- padding?: string;
539
- };
540
- footer?: {
541
- padding?: string;
542
- className?: string;
543
- };
544
- dictionary?: {
545
- close?: string;
546
- };
547
- }
548
-
549
- declare interface ContentBlock {
550
- draw?: DrawContent;
551
- schedule?: ScheduleContent;
552
- }
553
-
554
- export declare function controlBar(params: {
555
- table?: any;
556
- targetClassName?: string;
557
- items?: any[];
558
- onSelection?: (rows: any[]) => void;
559
- target?: HTMLElement;
560
- selectItemFn?: (params: any) => void;
561
- }): {
562
- elements: Record<string, HTMLElement>;
563
- inputs: Record<string, HTMLInputElement>;
564
- };
565
-
566
- declare interface CourtAvailabilityModalConfig {
567
- title: string;
568
- currentDay: string;
569
- currentStartTime: string;
570
- currentEndTime: string;
571
- showScopeToggle?: boolean;
572
- venueBounds?: {
573
- startTime: string;
574
- endTime: string;
575
- };
576
- onConfirm: (params: {
577
- startTime: string;
578
- endTime: string;
579
- scope: 'current-day' | 'all-days';
580
- }) => void;
581
- onCancel?: () => void;
582
- /** Custom labels for UI text */
583
- labels?: {
584
- startTime?: string;
585
- endTime?: string;
586
- applyTo?: string;
587
- currentDayOnly?: string;
588
- allDays?: string;
589
- cancel?: string;
590
- apply?: string;
591
- venueWarning?: string;
592
- };
593
- }
594
-
595
- declare interface CourtGridSlotCallbacks {
596
- onMatchUpDrop?: (payload: SchedulePageDragPayload, event: DragEvent) => void;
597
- }
598
-
599
- declare interface CourtGridSlotOptions {
600
- gridMaxHeight?: string;
601
- }
602
-
603
- export declare function courthiveComponentsVersion(): string;
604
-
605
- declare type CourtRef = temporal.CourtRef;
606
-
607
- declare type CourtRef_2 = temporal.CourtRef;
608
-
609
- declare class CourtTimeline {
610
- private options;
611
- private callbacks;
612
- private scale;
613
- private timeAxis;
614
- private layout;
615
- private renderer;
616
- private interaction;
617
- private rootEl;
618
- private bodyEl;
619
- private resizeObserver;
620
- private _batchUpdating;
621
- private eventListeners;
622
- constructor(container: HTMLElement, items: TimelineItemData[], groups: TimelineGroupData[], options?: TimelineOptions);
623
- setGroups(groups: TimelineGroupData[]): void;
624
- setItems(items: TimelineItemData[]): void;
625
- setWindow(start: Date, end: Date, _opts?: {
626
- animation?: boolean;
627
- }): void;
628
- setOptions(opts: Partial<TimelineOptions>): void;
629
- on(event: string, handler: (...args: any[]) => void): void;
630
- off(event: string, handler: (...args: any[]) => void): void;
631
- private emit;
632
- /** Register callback for multi-row ghost creation */
633
- onMultiRowCreate(handler: (span: MultiRowSpan) => void): void;
634
- /** Register onAdd callback (double-click on empty area → single block) */
635
- onAdd(handler: (item: {
636
- group: string;
637
- start: Date;
638
- end: Date;
639
- }) => void): void;
640
- /** Register onMove callback (drag/resize completed) */
641
- onMove(handler: (item: {
642
- id: string;
643
- group: string;
644
- start: Date;
645
- end: Date;
646
- }) => boolean): void;
647
- /** Register onMoving callback (live validation during drag) */
648
- onMoving(handler: (item: {
649
- id: string;
650
- group: string;
651
- start: Date;
652
- end: Date;
653
- }) => {
654
- start: Date;
655
- end: Date;
656
- } | null): void;
657
- /** Register callback for click on a day label in the axis header */
658
- onDayClick(handler: (dayStr: string) => void): void;
659
- /** Get the content area element (for external DOM queries like popover anchoring) */
660
- getContentElement(): HTMLElement;
661
- /**
662
- * Set daily operating bounds. Overnight gaps are collapsed so each day
663
- * only shows the operating window (e.g., "07:00" to "21:00").
664
- */
665
- setDailyBounds(startTime: string, endTime: string): void;
666
- /** Remove daily bounds — return to continuous 24-hour mode */
667
- clearDailyBounds(): void;
668
- /**
669
- * Set the explicit list of days to display. In daily-bounds mode, only
670
- * these days get column space — gap days are fully collapsed.
671
- */
672
- setVisibleDays(days: string[]): void;
673
- /** Clear visible days restriction while keeping daily bounds active */
674
- clearVisibleDays(): void;
675
- /**
676
- * Begin a batch update. While batching, renderAll() calls are suppressed.
677
- * Call endBatchUpdate() when done to trigger a single render.
678
- */
679
- beginBatchUpdate(): void;
680
- /** End batch update and trigger a single render. */
681
- endBatchUpdate(): void;
682
- private renderAll;
683
- destroy(): void;
684
- }
685
-
686
- export declare function createCardPopoverManager(callbacks: CardPopoverCallbacks): CardPopoverManager;
687
-
688
- export declare function createCompositionEditor(container: HTMLElement, config: CompositionEditorConfig): {
689
- destroy: () => void;
690
- getComposition: () => SavedComposition;
691
- };
692
-
693
- /**
694
- * Creates an interactive footer bar for inline scoring:
695
- * [Undo] [Redo] [Clear] [Submit] | situation flags
696
- */
697
- export declare function createInlineScoringFooter(params: FooterParams): {
698
- element: HTMLElement;
699
- update: () => void;
700
- };
701
-
702
- export declare function createPolicyCatalog(config: PolicyCatalogConfig, container: HTMLElement): PolicyCatalogControl;
703
-
704
- export declare function createPrintCompositionEditor(container: HTMLElement, config: PrintCompositionEditorConfig): PrintCompositionEditorHandle;
705
-
706
- export declare function createSchedulePage(config: SchedulePageConfig, container: HTMLElement): SchedulePageControl;
707
-
708
- /**
709
- * Convenience factory for standalone use (e.g., TMX scheduling page).
710
- */
711
- export declare function createSchedulingEditor(config: SchedulingEditorConfig, container: HTMLElement): SchedulingEditorControl;
712
-
713
- export declare function createSchedulingProfile(config: SchedulingProfileConfig, container: HTMLElement): SchedulingProfileControl;
714
-
715
- /**
716
- * Create and render a temporal grid
717
- */
718
- export declare function createTemporalGrid(config: TemporalGridConfig, container: HTMLElement): TemporalGrid;
719
-
720
- declare interface DateStripCallbacks {
721
- onDateSelected: (date: string) => void;
722
- }
723
-
724
- declare interface DateStripCallbacks_2 {
725
- onDateSelected: (date: string) => void;
726
- }
727
-
728
- declare function dateValidator(value: any): boolean;
729
-
730
- declare type DayId = temporal.DayId;
731
-
732
- declare type DayId_2 = temporal.DayId;
733
-
734
- declare type DayId_3 = temporal.DayId;
735
-
736
- declare const DEFAULT_COLOR_SCHEME: BlockColorScheme;
737
-
738
- export declare const DEFAULT_SCHEDULE_CELL_CONFIG: ScheduleCellConfig;
739
-
740
- export declare interface DemandAdapter {
741
- estimateDayDemandMinutes: (date: string, profile: SchedulingProfile) => number;
742
- }
743
-
744
- export declare interface DependencyAdapter {
745
- /**
746
- * Returns roundKeyStrings for all rounds that must complete
747
- * before the given round can proceed.
748
- * Key format: "tournamentId|eventId|drawId|structureId|roundNumber"
749
- */
750
- getRoundDependencies: (roundKeyString: string) => string[];
751
- }
752
-
753
- export declare function destroyTipster(target?: HTMLElement | any): void;
754
-
755
- export declare interface DisplayExtensionValue {
756
- compositionName?: string;
757
- theme?: string;
758
- configuration?: Partial<Configuration>;
759
- }
760
-
761
- export declare type DragPayload = CatalogDragPayload | PlannedDragPayload;
762
-
763
- declare interface DrawContent {
764
- includeSeedings?: boolean;
765
- includeScores?: boolean;
766
- showByes?: boolean;
767
- showDrawPositions?: boolean;
768
- }
769
-
770
- export declare const drawer: (drawerId?: string) => any;
771
-
772
- export declare interface DrawerOptions {
773
- title?: string;
774
- content?: string | ((elem: HTMLElement, close: () => void) => any);
775
- side?: 'left' | 'right';
776
- width?: string;
777
- footer?: string | ((elem: HTMLElement, close: () => void) => any);
778
- callback?: () => void;
779
- onClose?: () => boolean | void;
780
- }
781
-
782
- export declare interface DrawOptionsResult {
783
- drawOptions: any;
784
- postGenerationMethods: any[];
785
- }
786
-
787
- export declare class DrawStateManager {
788
- private tournamentRecord;
789
- private readonly drawId;
790
- private readonly structureId;
791
- private readonly eventId;
792
- private renderCallback?;
793
- private focusDrawPosition?;
794
- constructor({ tournamentRecord, drawId, structureId, eventId }: {
795
- tournamentRecord: any;
796
- drawId: string;
797
- structureId: string;
798
- eventId?: string;
799
- });
800
- /**
801
- * Set callback to trigger re-render when state changes
802
- */
803
- setRenderCallback(callback: RenderCallback): void;
804
- /**
805
- * Get participant IDs from draw entries (via flight profile or drawDefinition.entries)
806
- */
807
- private getDrawEntryParticipantIds;
808
- /**
809
- * Get participants entered in the draw (including qualifiers)
810
- */
811
- getAllParticipants(): Participant[];
812
- /**
813
- * Get participants that haven't been assigned to draw positions yet
814
- */
815
- getAvailableParticipants(): Participant[];
816
- /**
817
- * Remove participant assignment from a draw position
818
- */
819
- removeAssignment({ drawPosition }: {
820
- drawPosition: number;
821
- }): {
822
- success: boolean;
823
- error?: any;
824
- };
825
- /**
826
- * Assign a participant to a specific draw position
827
- * Note: Direct assignment replaces existing assignment (even with scores)
828
- */
829
- assignParticipant({ drawPosition, participantId }: {
830
- drawPosition: number;
831
- participantId: string;
832
- }): {
833
- success: boolean;
834
- error?: any;
835
- };
836
- /**
837
- * Get and clear the drawPosition that should receive focus
838
- */
839
- getAndClearFocusDrawPosition(): number | undefined;
840
- /**
841
- * Assign a BYE to a specific draw position
842
- * Note: Direct assignment replaces existing assignment (even with scores)
843
- */
844
- assignBye({ drawPosition }: {
845
- drawPosition: number;
846
- }): {
847
- success: boolean;
848
- error?: any;
849
- };
850
- /**
851
- * Assign a QUALIFIER placeholder to a specific draw position
852
- * Note: Used when structure has qualifying stage feeding into it
853
- */
854
- assignQualifier({ drawPosition }: {
855
- drawPosition: number;
856
- }): {
857
- success: boolean;
858
- error?: any;
859
- };
860
- /**
861
- * Get all matchUps for the draw with properly populated drawPosition data
862
- */
863
- getMatchUps(): any[];
864
- /**
865
- * Get current tournament state
866
- */
867
- getState(): any;
868
- /**
869
- * Get draw context information
870
- */
871
- getContext(): {
872
- drawId: string;
873
- structureId: string;
874
- };
875
- }
876
-
877
- export declare function dropDownButton({ target, button, stateChange }: {
878
- target?: HTMLElement;
879
- button: any;
880
- stateChange?: () => void;
881
- }): HTMLDivElement;
882
-
883
- export declare interface DropResult {
884
- ok: boolean;
885
- profile: SchedulingProfile;
886
- }
887
-
888
- export declare interface DropTarget {
889
- date: string;
890
- venueId: string;
891
- index: number;
892
- }
893
-
894
- declare interface EdgeEditorCallbacks {
895
- onUpdateEdge: (edgeId: string, updates: Partial<TopologyEdge>) => void;
896
- onDeleteEdge: (edgeId: string) => void;
897
- readOnly?: boolean;
898
- }
899
-
900
- declare interface EditorShellCallbacks {
901
- onSave: () => void;
902
- onReset: () => void;
903
- onApply: () => void;
904
- onDuplicate: () => void;
905
- }
906
-
907
- declare interface EditorShellPanel extends UIPanel_4<PolicyCatalogState> {
908
- bodyElement: HTMLElement;
909
- }
910
-
911
- declare const emailValidator: (value: string) => RegExpMatchArray | null;
912
-
913
- /** Create empty scheduling policy with sensible structure */
914
- export declare function emptySchedulingPolicy(): SchedulingPolicyData;
915
-
916
- declare interface EngineBlockPopoverOptions {
917
- itemId: string;
918
- blockId: string;
919
- engine: TemporalEngine;
920
- day: string;
921
- onBlockChanged: () => void;
922
- }
923
-
924
- /**
925
- * Bridge: converts ScoringEngine state into a TODS-compatible MatchUp object
926
- * suitable for renderMatchUp(). Injects live point display into the active set.
927
- */
928
- export declare function engineToMatchUp(engine: any, baseMatchUp: MatchUp): MatchUp;
929
-
930
- declare interface EventHandlers {
931
- matchUpClick?: (params: {
932
- pointerEvent: MouseEvent;
933
- matchUp: MatchUp;
934
- }) => void;
935
- participantClick?: (params: {
936
- individualParticipant: IndividualParticipant;
937
- matchUp?: MatchUp;
938
- pointerEvent: MouseEvent;
939
- participant?: Participant;
940
- side?: Side;
941
- }) => void;
942
- assignParticipant?: (params: {
943
- matchUp: MatchUp;
944
- side: Side;
945
- sideNumber: number;
946
- participant: Participant;
947
- pointerEvent?: Event;
948
- }) => void;
949
- assignBye?: (params: {
950
- matchUp: MatchUp;
951
- side: Side;
952
- sideNumber: number;
953
- pointerEvent?: Event;
954
- }) => void;
955
- assignQualifier?: (params: {
956
- matchUp: MatchUp;
957
- side: Side;
958
- sideNumber: number;
959
- pointerEvent?: Event;
960
- }) => void;
961
- removeAssignment?: (params: {
962
- matchUp: MatchUp;
963
- side: Side;
964
- sideNumber: number;
965
- pointerEvent?: Event;
966
- }) => void;
967
- scoreClick?: (params: {
968
- pointerEvent: MouseEvent;
969
- matchUp: MatchUp;
970
- }) => void;
971
- pillClick?: (params: {
972
- pointerEvent: MouseEvent;
973
- matchUp: MatchUp;
974
- sideNumber: number;
975
- }) => void;
976
- scoreIncrement?: (params: {
977
- matchUpId: string;
978
- sideNumber: number;
979
- scoreType: 'point' | 'game' | 'set';
980
- }) => void;
981
- inlineUndo?: (params: {
982
- matchUpId: string;
983
- }) => void;
984
- inlineRedo?: (params: {
985
- matchUpId: string;
986
- }) => void;
987
- inlineClear?: (params: {
988
- matchUpId: string;
989
- }) => void;
990
- inlineSubmit?: (params: {
991
- matchUpId: string;
992
- }) => void;
993
- [key: string]: any;
994
- }
995
-
996
- export declare function filterCatalog(catalog: CatalogRoundItem[], query: string, plannedKeys: Set<string>, behavior?: PlannedRoundBehavior): Array<CatalogRoundItem & {
997
- isPlanned: boolean;
998
- }>;
999
-
1000
- export declare function filterMatchUpCatalog(catalog: CatalogMatchUpItem[], query: string, behavior?: ScheduledBehavior, filters?: CatalogFilters, showCompleted?: boolean): CatalogMatchUpItem[];
1001
-
1002
- /**
1003
- * Filter catalog items by search query.
1004
- * Matches against name, policyType label, description, and source.
1005
- */
1006
- export declare function filterPolicyCatalog(catalog: PolicyCatalogItem[], searchQuery: string): PolicyCatalogItem[];
1007
-
1008
- export declare function findIssuesForLocator(ruleResults: ValidationResult[], locator: RoundLocator): ValidationResult[];
1009
-
1010
- export declare interface FixAction {
1011
- kind: FixActionKind;
1012
- label: string;
1013
- locator?: RoundLocator;
1014
- after?: RoundLocator;
1015
- before?: RoundLocator;
1016
- date?: string;
1017
- }
1018
-
1019
- declare type FixActionKind = 'JUMP_TO_ITEM' | 'OPEN_TEMPORAL_GRID' | 'MOVE_ITEM_AFTER' | 'MOVE_ITEM_BEFORE';
1020
-
1021
- export declare interface FlightProfileConfig {
1022
- labels?: {
1023
- title?: string;
1024
- flightsCountLabel?: string;
1025
- namingTypeLabel?: string;
1026
- customNameLabel?: string;
1027
- suffixTypeLabel?: string;
1028
- scaleTypeLabel?: string;
1029
- scaleNameLabel?: string;
1030
- eventTypeLabel?: string;
1031
- splitMethodLabel?: string;
1032
- flightNamesLabel?: string;
1033
- cancel?: string;
1034
- ok?: string;
1035
- existingNote?: string;
1036
- };
1037
- options?: {
1038
- eventTypes?: string[];
1039
- ratingTypes?: string[];
1040
- };
1041
- eventType?: string;
1042
- }
1043
-
1044
- declare interface FooterBlock {
1045
- layout?: PrintFooterLayout;
1046
- showTimestamp?: boolean;
1047
- showPageNumbers?: boolean;
1048
- }
1049
-
1050
- declare interface FooterConfig {
1051
- layout: string;
1052
- showPageNumbers?: boolean;
1053
- showTimestamp?: boolean;
1054
- releaseDate?: string;
1055
- drawCeremonyDate?: string;
1056
- notes?: string[];
1057
- }
1058
-
1059
- declare interface FooterParams {
1060
- matchUpId: string;
1061
- manager: InlineScoringManager;
1062
- baseMatchUp: MatchUp;
1063
- onUpdate: (matchUp: MatchUp) => void;
1064
- showSituation?: boolean;
1065
- }
1066
-
1067
- /** Get a human-readable description for a matchUp format code */
1068
- export declare function formatCodeLabel(code: string): string;
1069
-
1070
- /**
1071
- * Convert a tods-competition-factory `getEventData().drawsData[i].structures[0]`
1072
- * object into the TODS-aligned SunburstDrawData that the sunburst consumes.
1073
- */
1074
- export declare function fromFactoryDrawData(structure: any): SunburstDrawData;
1075
-
1076
- /**
1077
- * Convert a legacy TournamentDraw (with R128/R64/.../F/W round keys)
1078
- * into the TODS-aligned SunburstDrawData.
1079
- */
1080
- export declare function fromLegacyDraw(tournamentDraw: any): SunburstDrawData;
1081
-
1082
- export declare function generatePreviewMatchUps({ structureType, drawSize, stage, structureId, qualifyingPositions, structureOptions }: {
1083
- structureType: string;
1084
- drawSize: number;
1085
- stage?: string;
1086
- structureId?: string;
1087
- qualifyingPositions?: number;
1088
- structureOptions?: any;
1089
- }): SchematicMatchUp[];
1090
-
1091
- export declare interface GenerateTeamsConfig {
1092
- callback?: (participants: any[]) => void;
1093
- consideredDate?: string;
1094
- title?: string;
1095
- /** Builtin + user tieFormats for team size inference */
1096
- tieFormats?: {
1097
- label: string;
1098
- value: string;
1099
- tieFormat: any;
1100
- }[];
1101
- /** Custom labels for form fields and buttons */
1102
- labels?: {
1103
- gender?: string;
1104
- teamsCount?: string;
1105
- tieFormatTemplate?: string;
1106
- manualTeamSize?: string;
1107
- playersPerTeam?: string;
1108
- countries?: string;
1109
- cancel?: string;
1110
- generate?: string;
1111
- genderAny?: string;
1112
- genderFemale?: string;
1113
- genderMale?: string;
1114
- };
1115
- }
1116
-
1117
- /**
1118
- * Main function to open the age category modal
1119
- */
1120
- export declare function getAgeCategoryModal({ existingAgeCategoryCode, existingCategory, editorConfig: userConfig, consideredDate: providedDate, callback, config, modalConfig }?: {
1121
- existingAgeCategoryCode?: string;
1122
- existingCategory?: {
1123
- ageCategoryCode?: string;
1124
- [key: string]: any;
1125
- };
1126
- editorConfig?: AgeCategoryConfig;
1127
- consideredDate?: string;
1128
- callback?: (category: {
1129
- ageCategoryCode: string;
1130
- [key: string]: any;
1131
- }) => void;
1132
- config?: AgeCategoryConfig;
1133
- modalConfig?: any;
1134
- }): {
1135
- setContent: ({ content: newContent, config }: {
1136
- content?: string | HTMLElement | ((container: HTMLElement) => any);
1137
- config?: ModalConfig;
1138
- }) => void;
1139
- setButtons: ({ buttons, config }: {
1140
- buttons: ModalButton[];
1141
- config?: ModalConfig;
1142
- }) => void;
1143
- update: ({ content: newContent, buttons, title, config: newConfig, onClose }: {
1144
- content?: string | HTMLElement | ((container: HTMLElement) => any);
1145
- buttons?: ModalButton[];
1146
- title?: string;
1147
- config?: ModalConfig;
1148
- onClose?: (params: {
1149
- content?: any;
1150
- }) => void;
1151
- }) => void;
1152
- };
1153
-
1154
- /**
1155
- * Opens the Category editor modal
1156
- * @param existingCategory - Optional existing category to edit
1157
- * @param editorConfig - Optional configuration for labels and options
1158
- * @param callback - Called with the category when user clicks OK
1159
- * @returns Modal result with open() and close() functions
1160
- */
1161
- export declare function getCategoryModal(params: {
1162
- existingCategory?: Category;
1163
- editorConfig?: CategoryConfig;
1164
- callback?: (category: Category) => void;
1165
- }): any;
1166
-
1167
- /**
1168
- * Opens the Flight Profile editor modal
1169
- * @param existingFlightProfile - Optional existing flight profile to edit
1170
- * @param editorConfig - Optional configuration for labels and options
1171
- * @param callback - Called with the flight profile configuration when user clicks OK
1172
- * @returns Modal result with open() and close() functions
1173
- */
1174
- export declare function getFlightProfileModal(params: {
1175
- existingFlightProfile?: any;
1176
- editorConfig?: FlightProfileConfig;
1177
- callback?: (config: any) => void;
1178
- }): any;
1179
-
1180
- export declare function getGenerateTeamsModal(config?: GenerateTeamsConfig): void;
1181
-
1182
- export declare function getMatchUpFormatModal({ existingMatchUpFormat, callback, config, modalConfig }?: {
1183
- existingMatchUpFormat?: string;
1184
- callback?: (format: string) => void;
1185
- config?: MatchUpFormatConfig;
1186
- modalConfig?: any;
1187
- }): {
1188
- setContent: ({ content: newContent, config }: {
1189
- content?: string | HTMLElement | ((container: HTMLElement) => any);
1190
- config?: ModalConfig;
1191
- }) => void;
1192
- setButtons: ({ buttons, config }: {
1193
- buttons: ModalButton[];
1194
- config?: ModalConfig;
1195
- }) => void;
1196
- update: ({ content: newContent, buttons, title, config: newConfig, onClose }: {
1197
- content?: string | HTMLElement | ((container: HTMLElement) => any);
1198
- buttons?: ModalButton[];
1199
- title?: string;
1200
- config?: ModalConfig;
1201
- onClose?: (params: {
1202
- content?: any;
1203
- }) => void;
1204
- }) => void;
1205
- };
1206
-
1207
- /**
1208
- * Get the match winner based on sets won
1209
- * Returns undefined if match is not complete
1210
- */
1211
- export declare function getMatchWinner(sets: SetScore[], bestOf: number, exactly?: number): 1 | 2 | undefined;
1212
-
1213
- /**
1214
- * Calculate the maximum allowed score for a regular set game score
1215
- * based on the opponent's score and set rules
1216
- *
1217
- * For timed sets, returns Infinity (no maximum) since scores don't need relationships
1218
- */
1219
- export declare function getMaxAllowedScore(setIndex: number, side: 1 | 2, currentScores: {
1220
- side1: number;
1221
- side2: number;
1222
- }, config: MatchUpConfig): number;
1223
-
1224
- /**
1225
- * Opens a modal for generating mock participants with configurable options.
1226
- *
1227
- * Features:
1228
- * - Gender selection (Any/Male/Female)
1229
- * - Participant count (8-256)
1230
- * - Age range with automatic validation (ageMax >= ageMin)
1231
- * - Number of countries to limit nationality diversity
1232
- * - Optional WTN/UTR ratings
1233
- * - Birthdate generation based on consideredDate and age range
1234
- *
1235
- * @param config - Configuration options
1236
- * @returns void
1237
- *
1238
- * @example
1239
- * // Basic usage
1240
- * getMockParticipantsModal({
1241
- * callback: (participants) => {
1242
- * console.log('Generated participants:', participants);
1243
- * // Add participants to tournament
1244
- * }
1245
- * });
1246
- *
1247
- * @example
1248
- * // With consideredDate and defaults
1249
- * getMockParticipantsModal({
1250
- * consideredDate: '2024-12-31',
1251
- * callback: (participants) => {
1252
- * // Add participants to tournament
1253
- * },
1254
- * defaults: {
1255
- * participantsCount: 64,
1256
- * ageMin: 10,
1257
- * ageMax: 18,
1258
- * nationalityCodesCount: 10,
1259
- * wtnRating: true
1260
- * }
1261
- * });
1262
- */
1263
- export declare function getMockParticipantsModal(config?: MockParticipantsConfig): void;
1264
-
1265
- export declare function getPlannedRoundKeys(profile: {
1266
- venues: {
1267
- rounds: {
1268
- roundSegment?: unknown;
1269
- }[];
1270
- }[];
1271
- }[]): Set<string>;
1272
-
1273
- /** Lookup metadata by policyType string */
1274
- export declare function getPolicyTypeMeta(policyType: string): PolicyTypeMeta | undefined;
1275
-
1276
- /**
1277
- * Get port position relative to canvas for SVG edge rendering.
1278
- */
1279
- export declare function getPortPosition(node: TopologyNode, portType: 'input' | 'winner' | 'loser'): {
1280
- x: number;
1281
- y: number;
1282
- };
1283
-
1284
- export declare function getRoundAt(profile: SchedulingProfile, locator: RoundLocator): RoundProfile | null;
1285
-
1286
- /**
1287
- * Get current scoring configuration
1288
- */
1289
- export declare function getScoringConfig(): ScoringConfig;
1290
-
1291
- /**
1292
- * Get the format for a specific set index
1293
- * Uses finalSetFormat for deciding set if available
1294
- */
1295
- export declare function getSetFormatForIndex(setIndex: number, config: MatchUpConfig): SetFormat | undefined;
1296
-
1297
- /**
1298
- * Calculate which side won a set
1299
- * Returns undefined if set is not complete
1300
- */
1301
- export declare function getSetWinner(setIndex: number, scores: {
1302
- side1: number;
1303
- side2: number;
1304
- tiebreak?: number;
1305
- }, config: MatchUpConfig): 1 | 2 | undefined;
1306
-
1307
- export declare function getVenueRounds(profile: SchedulingProfile, date: string, venueId: string): RoundProfile[];
1308
-
1309
- export declare interface GridMatchUpDragPayload {
1310
- type: 'GRID_MATCHUP';
1311
- matchUp: CatalogMatchUpItem;
1312
- sourceTime?: string;
1313
- sourceCourt?: string;
1314
- }
1315
-
1316
- export declare function groupCatalog(items: Array<CatalogRoundItem & {
1317
- isPlanned: boolean;
1318
- }>, mode: CatalogGroupBy): Map<string, Array<CatalogRoundItem & {
1319
- isPlanned: boolean;
1320
- }>>;
1321
-
1322
- export declare function groupMatchUpCatalog(items: CatalogMatchUpItem[], mode: MatchUpCatalogGroupBy): Map<string, CatalogMatchUpItem[]>;
1323
-
1324
- /**
1325
- * Group catalog items by type or source.
1326
- * Returns a Map with stable group ordering.
1327
- */
1328
- export declare function groupPolicyCatalog(catalog: PolicyCatalogItem[], groupBy: PolicyCatalogGroupBy): Map<string, PolicyCatalogItem[]>;
1329
-
1330
- declare interface HeaderBlock {
1331
- layout?: PrintHeaderLayout;
1332
- tournamentName?: string;
1333
- subtitle?: string;
1334
- }
1335
-
1336
- /**
1337
- * Composition Editor Modal — configure PDF header/footer layouts.
1338
- *
1339
- * Opens a modal with two tabs (via menu): Header Config and Footer Config.
1340
- * Each tab provides form controls for selecting layouts and entering field values.
1341
- * Returns the composed HeaderConfig + FooterConfig for pdf-factory.
1342
- */
1343
- declare interface HeaderConfig {
1344
- layout: string;
1345
- tournamentName: string;
1346
- subtitle?: string;
1347
- startDate?: string;
1348
- endDate?: string;
1349
- location?: string;
1350
- city?: string;
1351
- country?: string;
1352
- surface?: string;
1353
- prizeMoney?: string;
1354
- currency?: string;
1355
- supervisor?: string;
1356
- grade?: string;
1357
- sectionLabel?: string;
1358
- organizer?: string;
1359
- chiefUmpire?: string;
1360
- tournamentId?: string;
1361
- }
1362
-
1363
- export declare function hockeyRink(className: string): SVGSVGElement;
1364
-
1365
- declare interface IndividualParticipant {
1366
- participantOtherName?: string;
1367
- participantId: string;
1368
- participantName?: string;
1369
- person?: Person;
1370
- teams?: Participant[];
1371
- rankings?: ScalesByType;
1372
- ratings?: ScalesByType;
1373
- useOtherName?: boolean;
1374
- }
1375
-
1376
- /**
1377
- * Initialize drawer HTML structure in the DOM
1378
- */
1379
- export declare function initDrawer(drawerId?: string): void;
1380
-
1381
- export declare interface InlineScoringCallbacks {
1382
- onScoreChange?: (params: {
1383
- matchUpId: string;
1384
- matchUp: MatchUp;
1385
- engine: any;
1386
- }) => void;
1387
- onMatchComplete?: (params: {
1388
- matchUpId: string;
1389
- winningSide: number;
1390
- engine: any;
1391
- }) => void;
1392
- onEndMatch?: (params: {
1393
- matchUpId: string;
1394
- matchUpStatus: string;
1395
- sideNumber?: number;
1396
- engine: any;
1397
- }) => void;
1398
- onSubmit?: (params: {
1399
- matchUpId: string;
1400
- matchUp: MatchUp;
1401
- engine: any;
1402
- }) => void;
1403
- }
1404
-
1405
- export declare interface InlineScoringConfig {
1406
- mode: InlineScoringMode;
1407
- showFooter?: boolean;
1408
- showSituation?: boolean;
1409
- /** Runtime state for footer buttons — set by renderInlineMatchUp before calling renderMatchUp */
1410
- canUndo?: boolean;
1411
- canRedo?: boolean;
1412
- isComplete?: boolean;
1413
- situationText?: string;
1414
- }
1415
-
1416
- export declare interface InlineScoringEngineState {
1417
- engine: any;
1418
- matchUpFormat: string;
1419
- pointCount: number;
1420
- }
1421
-
1422
- /**
1423
- * Manages ScoringEngine instances for inline scoring in draw brackets.
1424
- * One engine per matchUpId; lazily created on first interaction.
1425
- */
1426
- export declare class InlineScoringManager {
1427
- private engines;
1428
- readonly callbacks: InlineScoringCallbacks;
1429
- constructor(callbacks?: InlineScoringCallbacks);
1430
- /**
1431
- * Get or create a ScoringEngine for a matchUp.
1432
- * If the matchUp has existing score data, initializes the engine with it.
1433
- */
1434
- getOrCreate(matchUpId: string, matchUpFormat: string, existingMatchUp?: MatchUp): InlineScoringEngineState;
1435
- get(matchUpId: string): InlineScoringEngineState | undefined;
1436
- has(matchUpId: string): boolean;
1437
- /**
1438
- * Add a point for a side. Used in 'points' mode.
1439
- * @param winner - 0 for side 1, 1 for side 2
1440
- */
1441
- addPoint(matchUpId: string, winner: 0 | 1, baseMatchUp: MatchUp): MatchUp | undefined;
1442
- /**
1443
- * Add a game for a side. Used in 'games' mode.
1444
- * @param winner - 0 for side 1, 1 for side 2
1445
- */
1446
- addGame(matchUpId: string, winner: 0 | 1, baseMatchUp: MatchUp): MatchUp | undefined;
1447
- /**
1448
- * Add a set score. Used in 'entry' mode.
1449
- */
1450
- addSet(matchUpId: string, side1Score: number, side2Score: number, baseMatchUp: MatchUp): MatchUp | undefined;
1451
- undo(matchUpId: string, baseMatchUp: MatchUp): MatchUp | undefined;
1452
- redo(matchUpId: string, baseMatchUp: MatchUp): MatchUp | undefined;
1453
- reset(matchUpId: string, baseMatchUp: MatchUp): MatchUp | undefined;
1454
- /**
1455
- * Get the current engine-derived matchUp data.
1456
- */
1457
- getMatchUp(matchUpId: string, baseMatchUp: MatchUp): MatchUp;
1458
- /**
1459
- * Get situation flags (break point, set point, etc.) for display.
1460
- */
1461
- getSituation(matchUpId: string): Record<string, boolean> | undefined;
1462
- canUndo(matchUpId: string): boolean;
1463
- canRedo(matchUpId: string): boolean;
1464
- isComplete(matchUpId: string): boolean;
1465
- remove(matchUpId: string): void;
1466
- clear(): void;
1467
- private notifyAndReturn;
1468
- }
1469
-
1470
- export declare type InlineScoringMode = 'points' | 'games';
1471
-
1472
- /**
1473
- * Handle returned by `buildInteractiveScoringShell`. Consumers mount
1474
- * `element` into the DOM, subscribe to state changes via
1475
- * `addEventListener`, and call `destroy()` on unmount.
1476
- */
1477
- export declare interface InteractiveScoringShell {
1478
- /** The root DOM element for the scoring UI. Mount this into the page. */
1479
- element: HTMLElement;
1480
- /** Get the current MatchUp snapshot (for persistence). */
1481
- getState(): MatchUp;
1482
- /** Reset the scoring engine to 0-0. */
1483
- reset(): void;
1484
- /** Remove all listeners and release engine resources. */
1485
- destroy(): void;
1486
- /** Subscribe to state change events. */
1487
- addEventListener(type: 'stateChanged', listener: (event: CustomEvent<StateChangedDetail>) => void): void;
1488
- removeEventListener(type: 'stateChanged', listener: (event: CustomEvent<StateChangedDetail>) => void): void;
1489
- }
1490
-
1491
- /**
1492
- * Configuration for `buildInteractiveScoringShell`.
1493
- *
1494
- * The shell is a mobile-first, full-page interactive scoring UI that
1495
- * wraps a `ScoringEngine` (via the existing `InlineScoringManager`)
1496
- * and presents two large point-entry buttons, a current score
1497
- * display, and a control bar with undo/reset.
1498
- *
1499
- * The shell is stateful but emits a `stateChanged` CustomEvent on
1500
- * every point so consumers (courthive-public for Phase 2) can
1501
- * persist the current MatchUp to IndexedDB or any other store.
1502
- *
1503
- * Phase 2 targets standard tennis matchUpFormats. INTENNSE, pickleball,
1504
- * and other formats are deferred to Phase 2.5+.
1505
- */
1506
- export declare interface InteractiveScoringShellConfig {
1507
- /** Unique matchUp id — used as the engine key and the persistence key. */
1508
- matchUpId: string;
1509
- /** matchUpFormat code, e.g. `'SET3-S:6/TB7'`. */
1510
- matchUpFormat: string;
1511
- /** Tournament id, for context display only (never sent anywhere). */
1512
- tournamentId: string;
1513
- /** Display name for side 1 (singles player or doubles pair). */
1514
- side1Name: string;
1515
- /** Display name for side 2. */
1516
- side2Name: string;
1517
- /**
1518
- * Optional initial MatchUp to resume from — typically loaded from
1519
- * IndexedDB. If omitted, the shell starts at 0-0.
1520
- */
1521
- initialMatchUp?: MatchUp;
1522
- }
1523
-
1524
- export declare function isCompletedStatus(status?: string): boolean;
1525
-
1526
- /**
1527
- * Determine if match is complete based on sets won
1528
- */
1529
- export declare function isMatchComplete(sets: SetScore[], bestOf: number, exactly?: number): boolean;
1530
-
1531
- /**
1532
- * Determine if a set is complete based on its scores
1533
- */
1534
- export declare function isSetComplete(setIndex: number, scores: {
1535
- side1: number;
1536
- side2: number;
1537
- tiebreak?: number;
1538
- }, config: MatchUpConfig): boolean;
1539
-
1540
- /**
1541
- * Check if a set is tiebreak-only (e.g., TB10)
1542
- */
1543
- export declare function isSetTiebreakOnly(format?: SetFormat): boolean;
1544
-
1545
- /**
1546
- * Check if a set format is timed (e.g., T10, T20)
1547
- */
1548
- export declare function isSetTimed(format?: SetFormat): boolean;
1549
-
1550
- export declare interface IssueIndex {
1551
- all: ValidationResult[];
1552
- bySeverity: Record<Severity, ValidationResult[]>;
1553
- byDate: Record<string, ValidationResult[]>;
1554
- byVenue: Record<string, ValidationResult[]>;
1555
- byDraw: Record<string, ValidationResult[]>;
1556
- counts: {
1557
- total: number;
1558
- ERROR: number;
1559
- WARN: number;
1560
- INFO: number;
1561
- byDate: Record<string, SeverityCounts>;
1562
- byVenue: Record<string, SeverityCounts>;
1563
- byDraw: Record<string, SeverityCounts>;
1564
- };
1565
- }
1566
-
1567
- declare interface IssuesPanelCallbacks {
1568
- onFixAction: (action: FixAction) => void;
1569
- }
1570
-
1571
- declare interface LayoutPanels {
1572
- dateStrip: UIPanel<ProfileStoreState>;
1573
- issuesPanel: UIPanel<ProfileStoreState>;
1574
- venueBoard: UIPanel<ProfileStoreState>;
1575
- roundCatalog: UIPanel<ProfileStoreState>;
1576
- inspectorPanel: UIPanel<ProfileStoreState>;
1577
- }
1578
-
1579
- declare interface LineUp {
1580
- participantId?: string;
1581
- }
1582
-
1583
- /**
1584
- * Maps a factory hydrated matchUp object to the flat ScheduleCellData shape.
1585
- * Handles sides[].participant.participantName nesting, schedule.* extraction, etc.
1586
- */
1587
- export declare function mapMatchUpToCellData(matchUp: any): ScheduleCellData;
1588
-
1589
- /**
1590
- * MatchUp format constants
1591
- * Generated from matchUpFormats.json for use in tests
1592
- */
1593
- export declare const MATCH_FORMATS: {
1594
- readonly SET3_S6_TB7: "SET3-S:6/TB7";
1595
- readonly SET3_S6_TB7_F_TB10: "SET3-S:6/TB7-F:TB10";
1596
- readonly SET3_S6_TB10: "SET3-S:6/TB10";
1597
- readonly SET3_S6_F_TB10: "SET3-S:6-F:TB10";
1598
- readonly SET3_S6_TB7_NOAD: "SET3-S:6/TB7NOAD";
1599
- readonly SET3_S8_TB7: "SET3-S:8/TB7";
1600
- readonly SET3_S8_TB7_AT7: "SET3-S:8/TB7@7";
1601
- readonly SET3_S4_TB7: "SET3-S:4/TB7";
1602
- readonly SET3_S4_TB7_F_TB10: "SET3-S:4/TB7-F:TB10";
1603
- readonly SET3_S4_TB5_AT3_F_TB10: "SET3-S:4/TB5@3-F:TB10";
1604
- readonly SET5_S6_TB7: "SET5-S:6/TB7";
1605
- readonly SET5_S6_TB7_F_TB10: "SET5-S:6/TB7-F:TB10";
1606
- readonly SET1_S6_TB7: "SET1-S:6/TB7";
1607
- readonly SET1_S6_TB10: "SET1-S:6/TB10";
1608
- readonly SET1_S6_TB7_AT5: "SET1-S:6/TB7@5";
1609
- readonly SET1_S8_TB7: "SET1-S:8/TB7";
1610
- readonly SET1_S4_TB7: "SET1-S:4/TB7";
1611
- readonly SET1_S5_TB9_AT4: "SET1-S:5/TB9@4";
1612
- readonly SET1_S_TB7: "SET1-S:T7";
1613
- readonly SET1_S_TB10: "SET1-S:TB10";
1614
- readonly SET1_S_TB21: "SET1-S:T21";
1615
- readonly SET1_S8: "SET1-S:8";
1616
- readonly SET1_S10: "SET1-S:10";
1617
- readonly FAST4: "SET5-S:4/NOAD";
1618
- readonly SET3X_T10A_TB1: "SET3XA-S:T10-F:TB1";
1619
- readonly SET3X_T10A_TB1_NOAD: "SET3XA-S:T10-F:TB1NOAD";
1620
- readonly SET4X_T10A_TB1: "SET4XA-S:T10-F:TB1";
1621
- };
1622
-
1623
- declare interface MatchUp {
1624
- matchUpId: string;
1625
- matchUpType?: 'SINGLES' | 'DOUBLES';
1626
- matchUpFormat?: string;
1627
- matchUpStatus?: string;
1628
- winningSide?: number;
1629
- roundNumber?: number;
1630
- roundPosition?: number;
1631
- finishingRound?: number;
1632
- roundFactor?: number;
1633
- stage?: string;
1634
- isRoundRobin?: boolean;
1635
- preFeedRound?: boolean;
1636
- collectionId?: string;
1637
- drawPositions?: number[];
1638
- structureName?: string;
1639
- structureId: string;
1640
- drawId?: string;
1641
- containerStructureId?: string;
1642
- tournamentId?: string;
1643
- roundOrder?: number;
1644
- venueId?: string;
1645
- courtId?: string;
1646
- sides?: Side[];
1647
- score?: Score;
1648
- schedule?: Schedule;
1649
- readyToScore?: boolean;
1650
- [key: string]: any;
1651
- }
1652
-
1653
- export declare interface MatchUpAverageTime {
1654
- matchUpFormatCodes: string[];
1655
- averageTimes: AverageTimeEntry[];
1656
- }
1657
-
1658
- declare interface MatchUpCardCallbacks {
1659
- onClick?: (matchUp: CatalogMatchUpItem) => void;
1660
- }
1661
-
1662
- declare interface MatchUpCatalogCallbacks {
1663
- onSearchChange: (query: string) => void;
1664
- onGroupByChange: (mode: MatchUpCatalogGroupBy) => void;
1665
- onFilterChange: (filters: CatalogFilters) => void;
1666
- onShowCompletedChange: (show: boolean) => void;
1667
- onShowScheduledChange?: (show: boolean) => void;
1668
- onMatchUpSelected?: (matchUp: CatalogMatchUpItem) => void;
1669
- onDropRemove?: (matchUpId: string) => void;
1670
- }
1671
-
1672
- export declare type MatchUpCatalogGroupBy = 'event' | 'draw' | 'round' | 'structure';
1673
-
1674
- /**
1675
- * Configuration for a matchUp
1676
- * Should be derived from TODS matchUpFormat strings using matchUpFormatCode.parse()
1677
- */
1678
- export declare type MatchUpConfig = {
1679
- bestOf: number;
1680
- exactly?: number;
1681
- setFormat?: SetFormat;
1682
- finalSetFormat?: SetFormat;
1683
- };
1684
-
1685
- export declare type MatchUpFormatCode = (typeof MATCH_FORMATS)[keyof typeof MATCH_FORMATS];
1686
-
1687
- declare interface MatchUpFormatConfig {
1688
- labels?: {
1689
- title?: string;
1690
- setFormatLabel?: string;
1691
- finalSetLabel?: string;
1692
- tiebreakLabel?: string;
1693
- finalSetToggleLabel?: string;
1694
- standardFormatsLabel?: string;
1695
- cancel?: string;
1696
- select?: string;
1697
- custom?: string;
1698
- aggregate?: string;
1699
- game?: string;
1700
- gameType?: string;
1701
- deuceRule?: string;
1702
- none?: string;
1703
- traditional?: string;
1704
- consecutive2?: string;
1705
- consecutive3?: string;
1706
- consecutive4?: string;
1707
- goldenPoint?: string;
1708
- starPoint?: string;
1709
- games?: string;
1710
- points?: string;
1711
- descriptors?: {
1712
- bestOf?: string;
1713
- exactly?: string;
1714
- };
1715
- what?: {
1716
- sets?: string;
1717
- tiebreaks?: string;
1718
- timedSets?: string;
1719
- };
1720
- advantage?: {
1721
- ad?: string;
1722
- noAd?: string;
1723
- };
1724
- };
1725
- options?: {
1726
- bestOf?: number[];
1727
- exactly?: number[];
1728
- setTo?: number[];
1729
- tiebreakTo?: number[];
1730
- tiebreakToExactly?: number[];
1731
- tiebreakAt?: number[];
1732
- minutes?: number[];
1733
- winBy?: number[];
1734
- matchRoots?: string[];
1735
- gameFormats?: string[];
1736
- modifiers?: string[];
1737
- };
1738
- preDefinedFormats?: Array<{
1739
- code: string;
1740
- text: string;
1741
- }>;
1742
- }
1743
-
1744
- export declare function matchUpLabel(item: CatalogMatchUpItem): string;
1745
-
1746
- export declare interface MatchUpRecoveryTime {
1747
- matchUpFormatCodes: string[];
1748
- recoveryTimes: RecoveryTimeEntry[];
1749
- }
1750
-
1751
- export declare function matchUpSearchKey(item: CatalogMatchUpItem): string;
1752
-
1753
- /**
1754
- * Schedule Page — Type Definitions
1755
- *
1756
- * All interfaces for the schedule page component.
1757
- * The component provides layout + matchUp catalog; the consumer injects the court grid.
1758
- */
1759
- export declare interface MatchUpSide {
1760
- participantName?: string;
1761
- participantId?: string;
1762
- seedNumber?: number;
1763
- ranking?: number;
1764
- }
1765
-
1766
- export declare function maxSeverity(issues: ValidationResult[]): Severity | null;
1767
-
1768
- /**
1769
- * Scheduling Policy Editor — Type Definitions
1770
- *
1771
- * Mirrors the factory's scheduling policy data shape exactly.
1772
- */
1773
- export declare interface MinutesEntry {
1774
- default: number;
1775
- DOUBLES?: number;
1776
- }
1777
-
1778
- /**
1779
- * Configuration for mock participants generation
1780
- */
1781
- export declare interface MockParticipantsConfig {
1782
- /** Callback invoked when participants are generated */
1783
- callback?: (participants: any[]) => void;
1784
- /** Tournament end date for birthdate calculation (ISO format: YYYY-MM-DD) */
1785
- consideredDate?: string;
1786
- /** Custom title for the modal */
1787
- title?: string;
1788
- /** Custom labels for form fields */
1789
- labels?: {
1790
- gender?: string;
1791
- count?: string;
1792
- ageRange?: string;
1793
- minAge?: string;
1794
- maxAge?: string;
1795
- ratings?: string;
1796
- countries?: string;
1797
- role?: string;
1798
- cancel?: string;
1799
- generate?: string;
1800
- genderAny?: string;
1801
- genderFemale?: string;
1802
- genderMale?: string;
1803
- /** @deprecated Use ratings label instead */
1804
- wtn?: string;
1805
- /** @deprecated Use ratings label instead */
1806
- utr?: string;
1807
- };
1808
- /** Default values for form fields */
1809
- defaults?: {
1810
- gender?: string;
1811
- participantsCount?: number;
1812
- participantRole?: string;
1813
- ageMin?: number;
1814
- ageMax?: number;
1815
- nationalityCodesCount?: number;
1816
- /** Array of rating type names to pre-select (e.g., ['WTN', 'UTR', 'DUPR']) */
1817
- ratings?: string[];
1818
- /** @deprecated Use ratings: ['WTN'] instead */
1819
- wtnRating?: boolean;
1820
- /** @deprecated Use ratings: ['UTR'] instead */
1821
- utrRating?: boolean;
1822
- };
1823
- /** Available participant role options. If not provided, only COMPETITOR is used. */
1824
- roleOptions?: {
1825
- label: string;
1826
- value: string;
1827
- }[];
1828
- }
1829
-
1830
- declare interface ModalButton {
1831
- label?: string;
1832
- text?: string;
1833
- id?: string;
1834
- intent?: string;
1835
- close?: boolean | (() => void);
1836
- disabled?: boolean;
1837
- hide?: boolean;
1838
- onClick?: (params: {
1839
- e: MouseEvent;
1840
- content?: any;
1841
- }) => void;
1842
- footer?: {
1843
- className?: string;
1844
- };
1845
- }
1846
-
1847
- declare interface ModalConfig extends Configuration {
1848
- onClose?: (params: {
1849
- content?: any;
1850
- }) => void;
1851
- }
1852
-
1853
- declare type ModalContent = string | HTMLElement | ((container: HTMLElement) => any);
1854
-
1855
- declare interface ModalParams {
1856
- title?: string;
1857
- content?: string | HTMLElement | ((container: HTMLElement) => any);
1858
- buttons?: ModalButton[];
1859
- footer?: string | HTMLElement;
1860
- config?: ModalConfig;
1861
- onClose?: (params: {
1862
- content?: any;
1863
- }) => void;
1864
- }
1865
-
1866
- declare interface MultiRowSpan {
1867
- /** IDs of all groups covered by the ghost */
1868
- groupIds: string[];
1869
- /** Top row index (0-based) */
1870
- topRowIndex: number;
1871
- /** Bottom row index (inclusive, 0-based) */
1872
- bottomRowIndex: number;
1873
- /** Time range */
1874
- startTime: Date;
1875
- endTime: Date;
1876
- }
1877
-
1878
- declare const nameValidator: (minLength: number, maxLength?: number) => (value: string) => boolean;
1879
-
1880
- declare interface NodeEditorCallbacks {
1881
- onUpdateNode: (nodeId: string, updates: Partial<TopologyNode>) => void;
1882
- onUpdateEdge: (edgeId: string, updates: Partial<TopologyEdge>) => void;
1883
- onDeleteNode: (nodeId: string) => void;
1884
- readOnly?: boolean;
1885
- hideDelete?: boolean;
1886
- }
1887
-
1888
- export declare function notesToolbar(options?: NotesToolbarOptions): HTMLElement;
1889
-
1890
- export declare interface NotesToolbarOptions {
1891
- onBold?: () => void;
1892
- onItalic?: () => void;
1893
- onUnderline?: () => void;
1894
- onStrike?: () => void;
1895
- onHeading?: (level: number | false) => void;
1896
- onColor?: (color: string) => void;
1897
- onBackground?: (color: string) => void;
1898
- onBulletList?: () => void;
1899
- onOrderedList?: () => void;
1900
- onAlign?: (align: string) => void;
1901
- onBlockquote?: () => void;
1902
- onCodeBlock?: () => void;
1903
- onLink?: (url: string) => void;
1904
- onVideo?: (url: string) => void;
1905
- onClearFormatting?: () => void;
1906
- }
1907
-
1908
- declare const numericRange: (min: number, max: number) => (value: string | number) => boolean;
1909
-
1910
- declare function numericValidator(value: string | number): boolean;
1911
-
1912
- export declare function openCompositionEditorModal(options?: CompositionEditorOptions): any;
1913
-
1914
- export declare function openScheduleCellConfigModal(options?: ScheduleCellConfigOptions): {
1915
- setContent: ({ content: newContent, config }: {
1916
- content?: string | HTMLElement | ((container: HTMLElement) => any);
1917
- config?: ModalConfig;
1918
- }) => void;
1919
- setButtons: ({ buttons, config }: {
1920
- buttons: ModalButton[];
1921
- config?: ModalConfig;
1922
- }) => void;
1923
- update: ({ content: newContent, buttons, title, config: newConfig, onClose }: {
1924
- content?: string | HTMLElement | ((container: HTMLElement) => any);
1925
- buttons?: ModalButton[];
1926
- title?: string;
1927
- config?: ModalConfig;
1928
- onClose?: (params: {
1929
- content?: any;
1930
- }) => void;
1931
- }) => void;
1932
- };
1933
-
1934
- export declare function padelCourt(className: string): SVGSVGElement;
1935
-
1936
- declare interface PageBlock {
1937
- pageSize?: PrintPageSize;
1938
- orientation?: PrintPageOrientation;
1939
- margins?: {
1940
- top: number;
1941
- right: number;
1942
- bottom: number;
1943
- left: number;
1944
- };
1945
- }
1946
-
1947
- declare interface Participant {
1948
- participantId: string;
1949
- participantName?: string;
1950
- participantOtherName?: string;
1951
- participantType?: 'INDIVIDUAL' | 'PAIR' | 'TEAM';
1952
- individualParticipants?: IndividualParticipant[];
1953
- entryStatus?: string;
1954
- luckyAdvancement?: boolean;
1955
- person?: Person;
1956
- useOtherName?: boolean;
1957
- }
1958
-
1959
- /** Controls how participant names are rendered inside a cell */
1960
- export declare interface ParticipantDisplayConfig {
1961
- nameFormat?: 'full' | 'last' | 'lastFirst' | 'firstLast';
1962
- showSeed?: boolean;
1963
- showRanking?: boolean;
1964
- showNationality?: boolean;
1965
- boldWinner?: boolean;
1966
- showPotentials?: boolean;
1967
- }
1968
-
1969
- export declare function participantLabel(side?: MatchUpSide): string;
1970
-
1971
- declare const passwordValidator: (value: any) => boolean;
1972
-
1973
- export declare interface PendingScheduleAction {
1974
- kind: 'schedule' | 'unschedule';
1975
- matchUpId: string;
1976
- /** Present for 'schedule' actions — the full item that was dropped */
1977
- matchUp?: CatalogMatchUpItem;
1978
- /** The DragEvent from the drop, if available */
1979
- event?: DragEvent;
1980
- }
1981
-
1982
- declare interface Person {
1983
- personId?: string;
1984
- standardFamilyName?: string;
1985
- standardGivenName?: string;
1986
- nationalityCode?: string;
1987
- addresses?: Address[];
1988
- rankings?: Ranking[];
1989
- ratings?: Rating[];
1990
- sex?: 'MALE' | 'FEMALE' | 'MIXED';
1991
- [key: string]: any;
1992
- }
1993
-
1994
- export declare function pickleballCourt(className: string): SVGSVGElement;
1995
-
1996
- declare interface PlannedDragPayload {
1997
- type: 'PLANNED_ROUND';
1998
- locator: RoundLocator;
1999
- }
2000
-
2001
- declare type PlannedRoundBehavior = 'dim' | 'hide' | 'navigate';
2002
-
2003
- /** Get all unique group names in display order */
2004
- export declare const POLICY_TYPE_GROUPS: PolicyTypeGroup[];
2005
-
2006
- export declare const POLICY_TYPE_METADATA: PolicyTypeMeta[];
2007
-
2008
- export declare type PolicyCatalogChangeListener = (state: PolicyCatalogState) => void;
2009
-
2010
- export declare interface PolicyCatalogConfig {
2011
- builtinPolicies?: PolicyCatalogItem[];
2012
- userPolicies?: PolicyCatalogItem[];
2013
- editorPlugins?: PolicyEditorPlugin[];
2014
- onPolicySaved?: (item: PolicyCatalogItem) => void;
2015
- onPolicyApplied?: (item: PolicyCatalogItem) => void;
2016
- onPolicyCreated?: (item: PolicyCatalogItem) => void;
2017
- onPolicyDeleted?: (id: string) => void;
2018
- onSelectionChanged?: (item: PolicyCatalogItem | null) => void;
2019
- }
2020
-
2021
- export declare class PolicyCatalogControl {
2022
- private readonly store;
2023
- private readonly layout;
2024
- private readonly editorShell;
2025
- private readonly unsubscribe;
2026
- private currentEditor;
2027
- private container;
2028
- constructor(config: PolicyCatalogConfig);
2029
- render(container: HTMLElement): void;
2030
- destroy(): void;
2031
- getStore(): PolicyCatalogStore;
2032
- private handleSelectPolicy;
2033
- private mountEditorForSelection;
2034
- private syncEditorFromStore;
2035
- private destroyCurrentEditor;
2036
- }
2037
-
2038
- export declare type PolicyCatalogGroupBy = 'type' | 'source';
2039
-
2040
- export declare interface PolicyCatalogItem {
2041
- id: string;
2042
- name: string;
2043
- policyType: string;
2044
- source: PolicySource;
2045
- description: string;
2046
- policyData: Record<string, unknown>;
2047
- }
2048
-
2049
- declare interface PolicyCatalogPanelCallbacks {
2050
- onSearchChange: (query: string) => void;
2051
- onGroupByChange: (mode: PolicyCatalogGroupBy) => void;
2052
- onSelectPolicy: (id: string) => void;
2053
- onNewPolicy?: (policyType: string) => void;
2054
- onDuplicatePolicy?: (id: string) => void;
2055
- onDeletePolicy?: (id: string) => void;
2056
- }
2057
-
2058
- export declare interface PolicyCatalogState {
2059
- catalog: PolicyCatalogItem[];
2060
- searchQuery: string;
2061
- groupBy: PolicyCatalogGroupBy;
2062
- selectedId: string | null;
2063
- editorDraft: Record<string, unknown> | null;
2064
- dirty: boolean;
2065
- }
2066
-
2067
- export declare class PolicyCatalogStore {
2068
- private state;
2069
- private readonly listeners;
2070
- private readonly config;
2071
- constructor(config: PolicyCatalogConfig);
2072
- getState(): PolicyCatalogState;
2073
- getSelectedItem(): PolicyCatalogItem | null;
2074
- setCatalogSearch(query: string): void;
2075
- setCatalogGroupBy(mode: PolicyCatalogGroupBy): void;
2076
- selectPolicy(id: string): void;
2077
- clearSelection(): void;
2078
- updateEditorDraft(data: Record<string, unknown>): void;
2079
- markDirty(): void;
2080
- markClean(): void;
2081
- savePolicy(): void;
2082
- resetDraft(): void;
2083
- applyPolicy(): void;
2084
- addNewPolicy(policyType: string): string;
2085
- duplicatePolicy(sourceId: string): string | null;
2086
- deletePolicy(id: string): void;
2087
- subscribe(listener: PolicyCatalogChangeListener): () => void;
2088
- private setState;
2089
- private emit;
2090
- }
2091
-
2092
- export declare interface PolicyEditorInstance {
2093
- element: HTMLElement;
2094
- setData(data: Record<string, unknown>): void;
2095
- getData(): Record<string, unknown>;
2096
- destroy(): void;
2097
- }
2098
-
2099
- export declare interface PolicyEditorPlugin {
2100
- policyType: string;
2101
- create(config: {
2102
- initialData: Record<string, unknown>;
2103
- onChange: (data: Record<string, unknown>) => void;
2104
- }): PolicyEditorInstance;
2105
- }
2106
-
2107
- export declare type PolicySource = 'builtin' | 'user';
2108
-
2109
- /**
2110
- * Policy Catalog — Type Definitions
2111
- */
2112
- export declare type PolicyTypeGroup = 'Tournament Operations' | 'Scoring & Results' | 'Ranking Points' | 'Draw Configuration' | 'Participants' | 'Display & Audit';
2113
-
2114
- export declare interface PolicyTypeMeta {
2115
- policyType: string;
2116
- label: string;
2117
- description: string;
2118
- group: PolicyTypeGroup;
2119
- hasEditor: boolean;
2120
- }
2121
-
2122
- declare interface PositionChip {
2123
- position: number;
2124
- edgeId: string;
2125
- targetName: string;
2126
- }
2127
-
2128
- export declare interface PrintCompositionConfig {
2129
- name?: string;
2130
- page?: PageBlock;
2131
- header?: HeaderBlock;
2132
- footer?: FooterBlock;
2133
- content?: ContentBlock;
2134
- }
2135
-
2136
- export declare interface PrintCompositionEditorConfig {
2137
- /** The print type whose composition is being edited. Determines which content fields render. */
2138
- printType: PrintType;
2139
- /** Initial config to seed the form. Defaults applied for missing fields. */
2140
- config?: PrintCompositionConfig;
2141
- /** When true, all fields are disabled. */
2142
- readOnly?: boolean;
2143
- /** Fired when the user clicks Save. */
2144
- onSave?: (config: PrintCompositionConfig) => void;
2145
- /** Fired on every field change with the current config. */
2146
- onChange?: (config: PrintCompositionConfig) => void;
2147
- }
2148
-
2149
- export declare interface PrintCompositionEditorHandle {
2150
- /** Remove the editor from the DOM and detach listeners. */
2151
- destroy: () => void;
2152
- /** Get the current config (deep clone). */
2153
- getConfig: () => PrintCompositionConfig;
2154
- /** Replace the config and re-render. */
2155
- setConfig: (config: PrintCompositionConfig) => void;
2156
- }
2157
-
2158
- export declare type PrintFooterLayout = 'standard' | 'seedings' | 'officials' | 'none';
2159
-
2160
- export declare type PrintHeaderLayout = 'grand-slam' | 'itf' | 'minimal' | 'none';
2161
-
2162
- export declare type PrintPageOrientation = 'portrait' | 'landscape' | 'auto';
2163
-
2164
- export declare type PrintPageSize = 'a4' | 'letter';
2165
-
2166
- /**
2167
- * Types for the print-composition editor.
2168
- *
2169
- * The editor produces a config that mirrors pdf-factory's `CompositionConfig`
2170
- * shape but is defined locally to avoid a hard runtime dep on pdf-factory.
2171
- * Callers (admin-client) bridge this object to pdf-factory at print time.
2172
- *
2173
- * See `Mentat/planning/PRINT_COMPOSITION_POLICY_PLAN.md` for the
2174
- * end-to-end architecture.
2175
- */
2176
- export declare type PrintType = 'draw' | 'schedule' | 'playerList' | 'courtCard' | 'signInSheet' | 'matchCard';
2177
-
2178
- declare type ProfileChangeListener = (state: ProfileStoreState) => void;
2179
-
2180
- export declare class ProfileStore {
2181
- private state;
2182
- private readonly listeners;
2183
- private readonly config;
2184
- constructor(config: SchedulingProfileConfig);
2185
- getState(): ProfileStoreState;
2186
- getSchedulingProfile(): SchedulingProfile;
2187
- selectDate(date: string): void;
2188
- selectCard(locator: RoundLocator | null): void;
2189
- setCatalogSearch(query: string): void;
2190
- setCatalogGroupBy(mode: CatalogGroupBy): void;
2191
- navigateToRound(item: CatalogRoundItem): void;
2192
- dropRound(drag: DragPayload, drop: DropTarget): {
2193
- ok: boolean;
2194
- errorMessage?: string;
2195
- };
2196
- removeRound(locator: RoundLocator): void;
2197
- setNotBeforeTime(locator: RoundLocator, time: string | undefined): void;
2198
- applyFixAction(action: FixAction): void;
2199
- subscribe(listener: ProfileChangeListener): () => void;
2200
- private setState;
2201
- private commitProfile;
2202
- private addRejectionNotice;
2203
- private revalidate;
2204
- private emit;
2205
- }
2206
-
2207
- export declare interface ProfileStoreState {
2208
- profileDraft: SchedulingProfile;
2209
- venues: VenueInfo[];
2210
- roundCatalog: CatalogRoundItem[];
2211
- schedulableDates: string[];
2212
- activeDates?: string[];
2213
- selectedDate: string | null;
2214
- selectedLocator: RoundLocator | null;
2215
- ruleResults: ValidationResult[];
2216
- issueIndex: IssueIndex;
2217
- catalogSearchQuery: string;
2218
- catalogGroupBy: CatalogGroupBy;
2219
- plannedRoundBehavior: PlannedRoundBehavior;
2220
- }
2221
-
2222
- declare interface Ranking {
2223
- rankingType?: string;
2224
- ranking?: number;
2225
- rankingDate?: string;
2226
- }
2227
-
2228
- declare interface Rating {
2229
- ratingType?: string;
2230
- rating?: number;
2231
- ratingDate?: string;
2232
- [key: string]: any;
2233
- }
2234
-
2235
- export declare interface RecoveryTimeEntry {
2236
- categoryNames?: string[];
2237
- categoryTypes?: string[];
2238
- minutes: MinutesEntry;
2239
- }
2240
-
2241
- export declare function renderButtons(target: HTMLElement, buttons: any[], close?: () => void): {
2242
- elements: Record<string, HTMLElement>;
2243
- };
2244
-
2245
- export declare type RenderCallback = () => void;
2246
-
2247
- export declare function renderContainer({ content, theme }: {
2248
- content: string | HTMLElement;
2249
- theme?: string;
2250
- }): HTMLElement;
2251
-
2252
- export declare function renderField(item: any): {
2253
- field: HTMLDivElement;
2254
- inputElement?: HTMLDivElement | HTMLSelectElement;
2255
- datepicker?: any;
2256
- subFields?: any[];
2257
- };
2258
-
2259
- export declare function renderForm(elem: HTMLElement, items: any[], relationships?: any[]): any;
2260
-
2261
- /**
2262
- * Renders a matchUp with inline scoring interactivity.
2263
- * Sets up event handlers and configuration state, then delegates to `renderMatchUp`.
2264
- * The footer buttons (Undo/Redo/Clear/Submit) are rendered by `renderMatchUp` itself,
2265
- * driven by the inlineScoring config state and eventHandlers passed down.
2266
- *
2267
- * Returns a container element that re-renders itself after each scoring action.
2268
- */
2269
- export declare function renderInlineMatchUp(params: RenderInlineMatchUpParams): HTMLElement;
2270
-
2271
- declare interface RenderInlineMatchUpParams {
2272
- matchUp: MatchUp;
2273
- composition: Composition;
2274
- manager: InlineScoringManager;
2275
- matchUpFormat?: string;
2276
- eventHandlers?: EventHandlers;
2277
- isLucky?: boolean;
2278
- isAdHoc?: boolean;
2279
- className?: string;
2280
- moiety?: boolean;
2281
- initialRoundNumber?: number;
2282
- isFinalRound?: boolean;
2283
- searchActive?: boolean;
2284
- selectedMatchUpId?: string;
2285
- }
2286
-
2287
- export declare function renderMatchUp(params: {
2288
- composition?: Composition;
2289
- initialRoundNumber?: number;
2290
- matchUp: MatchUp;
2291
- moiety?: boolean;
2292
- selectedMatchUpId?: string;
2293
- searchActive?: boolean;
2294
- isFinalRound?: boolean;
2295
- isLucky?: boolean;
2296
- isAdHoc?: boolean;
2297
- eventHandlers?: EventHandlers;
2298
- className?: string;
2299
- }): HTMLElement;
2300
-
2301
- export declare function renderMenu(elem: HTMLElement, menu: any[], close?: () => void): {
2302
- focusElement?: HTMLElement;
2303
- };
2304
-
2305
- export declare function renderOptions(select: HTMLSelectElement, item: any): void;
2306
-
2307
- export declare function renderParticipant({ initialRoundNumber, eventHandlers, sideContainer, composition, participant, placeholder, sideNumber, matchUp }: {
2308
- initialRoundNumber?: number;
2309
- eventHandlers?: EventHandlers;
2310
- sideContainer?: boolean;
2311
- composition?: Composition;
2312
- participant?: Participant;
2313
- placeholder?: any;
2314
- sideNumber?: number;
2315
- matchUp?: MatchUp;
2316
- }): HTMLElement;
2317
-
2318
- export declare function renderParticipantInput({ matchUp, side, sideNumber, eventHandlers, composition, position, currentParticipant }: {
2319
- matchUp: MatchUp;
2320
- side?: Side;
2321
- sideNumber?: number;
2322
- eventHandlers?: EventHandlers;
2323
- composition?: Composition;
2324
- position?: number;
2325
- currentParticipant?: any;
2326
- }): HTMLElement;
2327
-
2328
- export declare function renderRound({ initialRoundNumber, selectedMatchUpId, eventHandlers, isFinalRound, isRoundRobin, searchActive, composition, roundFactor, roundNumber, roundProfile, minWidth, matchUps, context, isLucky }: {
2329
- initialRoundNumber?: number;
2330
- selectedMatchUpId?: string;
2331
- eventHandlers?: EventHandlers;
2332
- isFinalRound?: boolean;
2333
- isRoundRobin?: boolean;
2334
- searchActive?: boolean;
2335
- composition?: Composition;
2336
- roundFactor?: number;
2337
- roundNumber: number;
2338
- roundProfile?: any;
2339
- minWidth?: string;
2340
- matchUps: MatchUp[];
2341
- context?: any;
2342
- isLucky?: boolean;
2343
- }): HTMLElement;
2344
-
2345
- export declare function renderRoundHeader({ eventHandlers, roundMatchUps, roundProfile, roundNumber, context }: {
2346
- eventHandlers?: EventHandlers;
2347
- roundMatchUps?: MatchUp[];
2348
- roundProfile?: any;
2349
- roundNumber: number;
2350
- context?: any;
2351
- }): HTMLElement;
2352
-
2353
- /**
2354
- * Renders a compact matchup: two 5px-tall slots separated by a 1px divider.
2355
- * Total height 11px vs ~60px for the full renderMatchUp.
2356
- */
2357
- export declare function renderSchematicMatchUp({ matchUp, moiety, isFirstRound, isFinalRound, isRoundRobin, isLucky }: {
2358
- matchUp: SchematicMatchUp;
2359
- moiety?: boolean;
2360
- isFirstRound?: boolean;
2361
- isFinalRound?: boolean;
2362
- isRoundRobin?: boolean;
2363
- isLucky?: boolean;
2364
- initialRoundNumber?: number;
2365
- }): HTMLElement;
2366
-
2367
- /**
2368
- * Renders a round column with optional simplified header (round number only)
2369
- * and compact schematic matchups.
2370
- */
2371
- export declare function renderSchematicRound({ initialRoundFactor, initialRoundNumber, isFinalRound, isRoundRobin, roundNumber, matchUps, showHeader, isLucky }: {
2372
- initialRoundFactor?: number;
2373
- initialRoundNumber?: number;
2374
- isFinalRound?: boolean;
2375
- isRoundRobin?: boolean;
2376
- roundNumber: number;
2377
- matchUps: SchematicMatchUp[];
2378
- showHeader?: boolean;
2379
- isLucky?: boolean;
2380
- }): HTMLElement;
2381
-
2382
- /**
2383
- * Compact bracket renderer showing structure shape without participant details.
2384
- * Uses the same getRoundMatchUps() engine call as renderStructure but produces
2385
- * a much smaller visual (~14px per matchup vs ~60px).
2386
- */
2387
- export declare function renderSchematicStructure({ initialRoundNumber, showHeaders, structureId, matchUps }: {
2388
- initialRoundNumber?: number;
2389
- showHeaders?: boolean;
2390
- structureId?: string;
2391
- matchUps: SchematicMatchUp[];
2392
- }): HTMLElement;
2393
-
2394
- /**
2395
- * Render a full team scorecard: header + collection panels + matchUp grids.
2396
- */
2397
- export declare function renderScorecard({ matchUp, composition, eventHandlers, swapSides }: ScorecardOptions): HTMLDivElement;
2398
-
2399
- export declare function renderStructure({ initialRoundNumber, selectedMatchUpId, eventHandlers, searchActive, composition, structureId, finalColumn, matchUps, minWidth, context }: {
2400
- initialRoundNumber?: number;
2401
- selectedMatchUpId?: string;
2402
- eventHandlers?: EventHandlers;
2403
- searchActive?: boolean;
2404
- composition?: Composition;
2405
- structureId?: string;
2406
- finalColumn?: boolean | HTMLElement;
2407
- matchUps: MatchUp[];
2408
- minWidth?: string;
2409
- context?: any;
2410
- }): HTMLElement;
2411
-
2412
- /**
2413
- * Render the team vs team header with names and aggregate score.
2414
- */
2415
- export declare function renderTeamVsHeader({ side1Name, side2Name, sets, winningSide, side1Id, side2Id }: TeamVsOptions): HTMLDivElement;
2416
-
2417
- /**
2418
- * Reset configuration to defaults
2419
- */
2420
- export declare function resetScoringConfig(): void;
2421
-
2422
- /**
2423
- * Resolves a published composition from a DISPLAY extension value.
2424
- * Returns a new composition object (never mutates the built-in singletons).
2425
- * Falls back to 'National' if the named composition is not found.
2426
- */
2427
- export declare function resolvePublishedComposition(display?: DisplayExtensionValue, fallbackName?: string): Composition;
2428
-
2429
- /**
2430
- * Grouping modes for resources
2431
- */
2432
- declare type ResourceGroupingMode = 'BY_VENUE' | 'BY_SURFACE' | 'BY_TAG' | 'FLAT';
2433
-
2434
- declare interface RoundAnnotation {
2435
- roundNumber: number;
2436
- linkType: string;
2437
- direction: 'source' | 'target';
2438
- edgeId: string;
2439
- isSelected: boolean;
2440
- }
2441
-
2442
- declare interface RoundCardCallbacks {
2443
- onClick: (locator: RoundLocator) => void;
2444
- onContextMenu?: (locator: RoundLocator, target: HTMLElement) => void;
2445
- }
2446
-
2447
- declare interface RoundCardData {
2448
- round: RoundProfile;
2449
- locator: RoundLocator;
2450
- isSelected: boolean;
2451
- severity: Severity | null;
2452
- }
2453
-
2454
- declare interface RoundCatalogCallbacks {
2455
- onSearchChange: (query: string) => void;
2456
- onGroupByChange: (mode: CatalogGroupBy) => void;
2457
- onDropRemove?: (locator: RoundLocator) => void;
2458
- onNavigateToPlanned?: (item: CatalogRoundItem) => void;
2459
- }
2460
-
2461
- export declare interface RoundKey {
2462
- tournamentId: string;
2463
- eventId: string;
2464
- drawId: string;
2465
- structureId: string;
2466
- roundNumber: number;
2467
- }
2468
-
2469
- export declare interface RoundLocator {
2470
- date: string;
2471
- venueId: string;
2472
- index: number;
2473
- roundKey: RoundKey;
2474
- roundSegment?: RoundSegment;
2475
- }
2476
-
2477
- export declare interface RoundProfile {
2478
- tournamentId: string;
2479
- eventId: string;
2480
- eventName?: string;
2481
- drawId: string;
2482
- drawName?: string;
2483
- structureId: string;
2484
- structureType?: string;
2485
- roundNumber: number;
2486
- roundName?: string;
2487
- roundSegment?: RoundSegment;
2488
- notBeforeTime?: string;
2489
- sortOrder?: number;
2490
- matchCountEstimate?: number;
2491
- }
2492
-
2493
- /**
2494
- * Scheduling Profile — Type Definitions
2495
- *
2496
- * All interfaces for the scheduling profile builder component.
2497
- * The SchedulingProfile shape matches the factory's `scheduleProfileRounds()` input.
2498
- */
2499
- export declare interface RoundSegment {
2500
- segmentNumber: number;
2501
- segmentsCount: number;
2502
- }
2503
-
2504
- /** JSON-serializable snapshot of a composition (no functions/DOM refs) */
2505
- export declare interface SavedComposition {
2506
- compositionName: string;
2507
- theme: string;
2508
- configuration: Configuration;
2509
- version?: number;
2510
- }
2511
-
2512
- declare interface ScaleItem {
2513
- scaleName?: string;
2514
- scaleValue?: any;
2515
- [key: string]: any;
2516
- }
2517
-
2518
- declare interface ScalesByType {
2519
- SINGLES?: ScaleItem[];
2520
- DOUBLES?: ScaleItem[];
2521
- }
2522
-
2523
- declare interface Schedule {
2524
- scheduledDate?: string;
2525
- scheduledTime?: string;
2526
- startTime?: string;
2527
- endTime?: string;
2528
- courtId?: string;
2529
- courtName?: string;
2530
- venueId?: string;
2531
- venueAbbreviation?: string;
2532
- }
2533
-
2534
- /**
2535
- * JSON-serializable cell configuration.
2536
- * 3 fixed zones (header, body, footer), each containing an ordered array of field identifiers.
2537
- * Safe for factory extensions and publishing data.
2538
- */
2539
- export declare interface ScheduleCellConfig {
2540
- header: ScheduleCellField[];
2541
- body: ScheduleCellField[];
2542
- footer: ScheduleCellField[];
2543
- participantDisplay?: ParticipantDisplayConfig;
2544
- }
2545
-
2546
- export declare interface ScheduleCellConfigOptions {
2547
- initial?: Partial<ScheduleCellDisplayConfig>;
2548
- onApply?: (config: ScheduleCellDisplayConfig) => void;
2549
- }
2550
-
2551
- /**
2552
- * Flat data shape the cell renderer consumes — mapped from factory matchUp objects.
2553
- * Decouples the renderer from the factory's nested matchUp shape.
2554
- */
2555
- export declare interface ScheduleCellData {
2556
- matchUpId: string;
2557
- drawId?: string;
2558
- eventName?: string;
2559
- roundName?: string;
2560
- matchUpFormat?: string;
2561
- matchUpType?: string;
2562
- matchUpStatus?: string;
2563
- winningSide?: number;
2564
- gender?: string;
2565
- sides?: ScheduleCellSide[];
2566
- potentialParticipants?: any[][];
2567
- schedule?: {
2568
- scheduledTime?: string;
2569
- startTime?: string;
2570
- timeModifiers?: string[];
2571
- courtAnnotation?: string;
2572
- courtId?: string;
2573
- courtOrder?: number;
2574
- venueId?: string;
2575
- };
2576
- score?: {
2577
- scoreStringSide1?: string;
2578
- scoreStringSide2?: string;
2579
- };
2580
- umpire?: string;
2581
- /** Conflict state injected by proConflicts */
2582
- scheduleState?: string;
2583
- issueType?: string;
2584
- issueIds?: string[];
2585
- /** Blocked cell (alternative to matchUp) */
2586
- isBlocked?: boolean;
2587
- booking?: {
2588
- bookingType?: string;
2589
- rowCount?: number;
2590
- notes?: string;
2591
- };
2592
- }
2593
-
2594
- /**
2595
- * Schedule Cell Configurator Modal — select what info appears in OOP grid cells.
2596
- *
2597
- * Provides checkboxes for each field that can appear in a schedule cell:
2598
- * participant names, match number, event/round, nationality, seeds,
2599
- * scheduled time, format code, score.
2600
- *
2601
- * Returns a CellConfig object consumed by pdf-factory's scheduleV2 renderer.
2602
- */
2603
- export declare interface ScheduleCellDisplayConfig {
2604
- showParticipantNames: boolean;
2605
- showNationality: boolean;
2606
- showSeedings: boolean;
2607
- showMatchNumber: boolean;
2608
- showEventRound: boolean;
2609
- showScheduledTime: boolean;
2610
- showMatchFormat: boolean;
2611
- showScore: boolean;
2612
- nameFormat: 'full' | 'abbreviated' | 'lastOnly';
2613
- cellStyle: 'detailed' | 'compact';
2614
- }
2615
-
2616
- /** Field identifiers for the 3-zone cell layout */
2617
- export declare type ScheduleCellField = 'time' | 'eventRound' | 'participants' | 'score' | 'matchUpStatus' | 'matchUpFormat' | 'umpire';
2618
-
2619
- /** Participant info for a single side of a matchUp cell */
2620
- export declare interface ScheduleCellSide {
2621
- sideNumber?: number;
2622
- participantName?: string;
2623
- participantId?: string;
2624
- seedNumber?: number;
2625
- ranking?: number;
2626
- nationality?: string;
2627
- /** Team name when participant is a member of a team (tie/team event) */
2628
- teamName?: string;
2629
- /** True if this side is a BYE (no participant) */
2630
- bye?: boolean;
2631
- }
2632
-
2633
- /**
2634
- * Schedule Cell TypeAhead — inline autocomplete for empty grid cells.
2635
- *
2636
- * Activates an Awesomplete typeahead input inside an empty schedule cell.
2637
- * The consumer provides a list of unscheduled matchUps and a selection callback.
2638
- * Reuses the existing createTypeAhead helper (Awesomplete wrapper).
2639
- */
2640
- export declare interface ScheduleCellTypeAheadOptions {
2641
- /** The grid cell element to activate the typeahead in */
2642
- cell: HTMLElement;
2643
- /** Returns the list of assignable matchUps as { label, value } */
2644
- listProvider: () => Array<{
2645
- label: string;
2646
- value: string;
2647
- }>;
2648
- /** Called when a matchUp is selected — value is the matchUpId */
2649
- onSelect: (matchUpId: string) => void;
2650
- /** Called when the typeahead is dismissed without selection */
2651
- onCancel?: () => void;
2652
- }
2653
-
2654
- declare interface ScheduleContent {
2655
- cellStyle?: 'detailed' | 'compact';
2656
- showMatchNumbers?: boolean;
2657
- alertBanner?: string;
2658
- }
2659
-
2660
- export declare interface ScheduleDate {
2661
- date: string;
2662
- isActive: boolean;
2663
- matchUpCount?: number;
2664
- issueCount?: number;
2665
- }
2666
-
2667
- export declare interface ScheduleDay {
2668
- scheduleDate: string;
2669
- venues: VenueSchedule[];
2670
- }
2671
-
2672
- export declare type ScheduledBehavior = 'dim' | 'hide';
2673
-
2674
- export declare interface ScheduleIssue {
2675
- severity: ScheduleIssueSeverity;
2676
- message: string;
2677
- matchUpId?: string;
2678
- date?: string;
2679
- /** Structured conflict data for rich rendering */
2680
- issueType?: string;
2681
- prefix?: string;
2682
- participants?: string;
2683
- conflictParticipants?: string[];
2684
- /** All matchUpIds involved in this conflict (for click-to-scroll fallback) */
2685
- conflictMatchUpIds?: string[];
2686
- }
2687
-
2688
- export declare interface ScheduleIssueCounts {
2689
- total: number;
2690
- ERROR: number;
2691
- WARN: number;
2692
- INFO: number;
2693
- }
2694
-
2695
- export declare interface ScheduleIssueIndex {
2696
- all: ScheduleIssue[];
2697
- bySeverity: Record<ScheduleIssueSeverity, ScheduleIssue[]>;
2698
- byDate: Record<string, ScheduleIssue[]>;
2699
- counts: ScheduleIssueCounts;
2700
- countsByDate: Record<string, ScheduleIssueCounts>;
2701
- }
2702
-
2703
- export declare type ScheduleIssueSeverity = 'ERROR' | 'WARN' | 'INFO';
2704
-
2705
- export declare type SchedulePageChangeListener = (state: SchedulePageState) => void;
2706
-
2707
- export declare interface SchedulePageConfig {
2708
- matchUpCatalog: CatalogMatchUpItem[];
2709
- scheduleDates: ScheduleDate[];
2710
- issues?: ScheduleIssue[];
2711
- courtGridElement?: HTMLElement;
2712
- /** Max height for the court grid viewport (e.g. '500px', '60vh'). Defaults to none (fills available space). */
2713
- gridMaxHeight?: string;
2714
- /** When true, the left column (date strip + issues panel) is not rendered at all. */
2715
- hideLeft?: boolean;
2716
- /** Which side to place the matchUp catalog. Defaults to 'right'. */
2717
- catalogSide?: 'left' | 'right';
2718
- scheduledBehavior?: ScheduledBehavior;
2719
- schedulingMode?: SchedulingMode;
2720
- onDateSelected?: (date: string) => void;
2721
- onMatchUpDrop?: (payload: SchedulePageDragPayload, event: DragEvent) => void;
2722
- onMatchUpRemove?: (matchUpId: string) => void;
2723
- onMatchUpSelected?: (matchUp: CatalogMatchUpItem | null) => void;
2724
- /** Called in 'bulk' mode when the user triggers save — receives all pending actions */
2725
- onBulkSave?: (actions: PendingScheduleAction[]) => void;
2726
- }
2727
-
2728
- export declare class SchedulePageControl {
2729
- private readonly store;
2730
- private readonly layout;
2731
- private readonly unsubscribe;
2732
- private container;
2733
- constructor(config: SchedulePageConfig);
2734
- render(container: HTMLElement): void;
2735
- destroy(): void;
2736
- setMatchUpCatalog(catalog: CatalogMatchUpItem[]): void;
2737
- setScheduleDates(dates: ScheduleDate[]): void;
2738
- setIssues(issues: ScheduleIssue[]): void;
2739
- save(): PendingScheduleAction[];
2740
- discardPending(): void;
2741
- get hasUnsavedChanges(): boolean;
2742
- getStore(): SchedulePageStore;
2743
- }
2744
-
2745
- export declare type SchedulePageDragPayload = CatalogMatchUpDragPayload | GridMatchUpDragPayload;
2746
-
2747
- declare interface SchedulePageLayoutCallbacks {
2748
- onToggleLeft: () => void;
2749
- }
2750
-
2751
- declare interface SchedulePageLayoutPanels {
2752
- dateStrip: UIPanel_3<SchedulePageState>;
2753
- issuesPanel: UIPanel_3<SchedulePageState>;
2754
- courtGridSlot: UIPanel_3<SchedulePageState>;
2755
- matchUpCatalog: UIPanel_3<SchedulePageState>;
2756
- inspectorPanel: UIPanel_3<SchedulePageState>;
2757
- }
2758
-
2759
- export declare interface SchedulePageState {
2760
- matchUpCatalog: CatalogMatchUpItem[];
2761
- scheduleDates: ScheduleDate[];
2762
- issues: ScheduleIssue[];
2763
- selectedDate: string | null;
2764
- selectedMatchUp: CatalogMatchUpItem | null;
2765
- catalogSearchQuery: string;
2766
- catalogGroupBy: MatchUpCatalogGroupBy;
2767
- catalogFilters: CatalogFilters;
2768
- showCompleted: boolean;
2769
- showScheduled: boolean;
2770
- scheduledBehavior: ScheduledBehavior;
2771
- schedulingMode: SchedulingMode;
2772
- pendingActions: PendingScheduleAction[];
2773
- hasUnsavedChanges: boolean;
2774
- leftCollapsed: boolean;
2775
- hideLeft: boolean;
2776
- }
2777
-
2778
- export declare class SchedulePageStore {
2779
- private state;
2780
- private readonly listeners;
2781
- private readonly config;
2782
- constructor(config: SchedulePageConfig);
2783
- getState(): SchedulePageState;
2784
- setMatchUpCatalog(catalog: CatalogMatchUpItem[]): void;
2785
- setScheduleDates(dates: ScheduleDate[]): void;
2786
- setIssues(issues: ScheduleIssue[]): void;
2787
- handleMatchUpDrop(payload: SchedulePageDragPayload, event: DragEvent): void;
2788
- handleMatchUpRemove(matchUpId: string): void;
2789
- /**
2790
- * Flush all pending actions via the onBulkSave callback and clear the queue.
2791
- * Returns the actions that were flushed.
2792
- */
2793
- save(): PendingScheduleAction[];
2794
- /**
2795
- * Discard all pending actions without saving.
2796
- */
2797
- discardPending(): void;
2798
- getPendingActions(): PendingScheduleAction[];
2799
- selectDate(date: string): void;
2800
- selectMatchUp(matchUp: CatalogMatchUpItem | null): void;
2801
- setCatalogSearch(query: string): void;
2802
- setCatalogGroupBy(mode: MatchUpCatalogGroupBy): void;
2803
- setCatalogFilters(filters: CatalogFilters): void;
2804
- setShowCompleted(show: boolean): void;
2805
- setShowScheduled(show: boolean): void;
2806
- toggleLeftPanel(): void;
2807
- subscribe(listener: SchedulePageChangeListener): () => void;
2808
- private setState;
2809
- private emit;
2810
- }
2811
-
2812
- export declare type SchedulingEditorChangeListener = (state: SchedulingEditorState) => void;
2813
-
2814
- export declare interface SchedulingEditorConfig {
2815
- initialPolicy?: SchedulingPolicyData;
2816
- categoryNames?: string[];
2817
- categoryTypes?: string[];
2818
- matchUpFormatCodes?: string[];
2819
- onChange?: (policy: SchedulingPolicyData) => void;
2820
- }
2821
-
2822
- export declare class SchedulingEditorControl {
2823
- private readonly store;
2824
- private readonly panel;
2825
- private readonly unsubscribe;
2826
- private container;
2827
- constructor(config: SchedulingEditorConfig);
2828
- render(container: HTMLElement): void;
2829
- destroy(): void;
2830
- getData(): SchedulingPolicyData;
2831
- setData(data: SchedulingPolicyData): void;
2832
- getStore(): SchedulingEditorStore;
2833
- /**
2834
- * Create as a PolicyEditorInstance for embedding in the catalog editor shell.
2835
- */
2836
- static createEditorInstance(config: {
2837
- initialData: Record<string, unknown>;
2838
- onChange: (data: Record<string, unknown>) => void;
2839
- }): PolicyEditorInstance;
2840
- }
2841
-
2842
- export declare type SchedulingEditorSection = 'modificationFlags' | 'dailyLimits' | 'defaultTimes' | 'averageTimes' | 'recoveryTimes';
2843
-
2844
- export declare interface SchedulingEditorState {
2845
- draft: SchedulingPolicyData;
2846
- expandedSections: Set<SchedulingEditorSection>;
2847
- dirty: boolean;
2848
- }
2849
-
2850
- export declare class SchedulingEditorStore {
2851
- private state;
2852
- private readonly listeners;
2853
- private readonly config;
2854
- constructor(config: SchedulingEditorConfig);
2855
- getState(): SchedulingEditorState;
2856
- getData(): SchedulingPolicyData;
2857
- setData(data: SchedulingPolicyData): void;
2858
- toggleSection(sectionId: SchedulingEditorSection): void;
2859
- setModificationFlag(key: 'courts' | 'venues', value: boolean): void;
2860
- setDailyLimit(key: 'SINGLES' | 'DOUBLES' | 'total', value: number): void;
2861
- setDefaultAverageTime(index: number, field: 'default' | 'DOUBLES', value: number | undefined): void;
2862
- setDefaultRecoveryTime(index: number, field: 'default' | 'DOUBLES', value: number | undefined): void;
2863
- addAverageFormatGroup(): void;
2864
- removeAverageFormatGroup(index: number): void;
2865
- setAverageFormatCodes(groupIndex: number, codes: string[]): void;
2866
- setAverageTime(groupIndex: number, overrideIndex: number, field: 'default' | 'DOUBLES', value: number | undefined): void;
2867
- addAverageCategoryOverride(groupIndex: number): void;
2868
- removeAverageCategoryOverride(groupIndex: number, overrideIndex: number): void;
2869
- setAverageOverrideCategories(groupIndex: number, overrideIndex: number, key: 'categoryNames' | 'categoryTypes', values: string[]): void;
2870
- addRecoveryFormatGroup(): void;
2871
- removeRecoveryFormatGroup(index: number): void;
2872
- setRecoveryFormatCodes(groupIndex: number, codes: string[]): void;
2873
- setRecoveryTime(groupIndex: number, overrideIndex: number, field: 'default' | 'DOUBLES', value: number | undefined): void;
2874
- addRecoveryCategoryOverride(groupIndex: number): void;
2875
- removeRecoveryCategoryOverride(groupIndex: number, overrideIndex: number): void;
2876
- setRecoveryOverrideCategories(groupIndex: number, overrideIndex: number, key: 'categoryNames' | 'categoryTypes', values: string[]): void;
2877
- subscribe(listener: SchedulingEditorChangeListener): () => void;
2878
- private commitDraft;
2879
- private emit;
2880
- }
2881
-
2882
- /**
2883
- * Controls how drop/remove actions are committed:
2884
- * - 'immediate': each drop fires the consumer callback right away (e.g. executionQueue per action)
2885
- * - 'bulk': actions accumulate in a pending queue; consumer calls save() to flush
2886
- */
2887
- export declare type SchedulingMode = 'immediate' | 'bulk';
2888
-
2889
- export declare interface SchedulingPolicyData {
2890
- allowModificationWhenMatchUpsScheduled?: {
2891
- courts: boolean;
2892
- venues: boolean;
2893
- };
2894
- defaultTimes?: {
2895
- averageTimes?: AverageTimeEntry[];
2896
- recoveryTimes?: RecoveryTimeEntry[];
2897
- };
2898
- defaultDailyLimits?: {
2899
- SINGLES?: number;
2900
- DOUBLES?: number;
2901
- total?: number;
2902
- };
2903
- matchUpAverageTimes?: MatchUpAverageTime[];
2904
- matchUpRecoveryTimes?: MatchUpRecoveryTime[];
2905
- matchUpDailyLimits?: unknown[];
2906
- }
2907
-
2908
- export declare type SchedulingProfile = ScheduleDay[];
2909
-
2910
- export declare interface SchedulingProfileConfig {
2911
- venues: VenueInfo[];
2912
- roundCatalog: CatalogRoundItem[];
2913
- schedulableDates: string[];
2914
- activeDates?: string[];
2915
- /** When true, the left column (date strip + issues panel) is not rendered. */
2916
- hideLeft?: boolean;
2917
- /** Which side to place the round catalog. Defaults to 'right'. */
2918
- catalogSide?: 'left' | 'right';
2919
- initialProfile?: SchedulingProfile;
2920
- selectedDate?: string;
2921
- temporalAdapter?: TemporalAdapter;
2922
- demandAdapter?: DemandAdapter;
2923
- dependencyAdapter?: DependencyAdapter;
2924
- venueOrder?: string[];
2925
- plannedRoundBehavior?: PlannedRoundBehavior;
2926
- onProfileChanged?: (profile: SchedulingProfile) => void;
2927
- onFixAction?: (action: FixAction) => void;
2928
- }
2929
-
2930
- export declare class SchedulingProfileControl {
2931
- private readonly store;
2932
- private readonly layout;
2933
- private readonly unsubscribe;
2934
- private readonly popover;
2935
- private container;
2936
- constructor(config: SchedulingProfileConfig);
2937
- render(container: HTMLElement): void;
2938
- destroy(): void;
2939
- getProfile(): SchedulingProfile;
2940
- getStore(): ProfileStore;
2941
- }
2942
-
2943
- export declare interface SchedulingValidationResult {
2944
- severity: SchedulingValidationSeverity;
2945
- path: string;
2946
- message: string;
2947
- }
2948
-
2949
- export declare type SchedulingValidationSeverity = 'error' | 'warning';
2950
-
2951
- export declare interface SchematicMatchUp {
2952
- matchUpId: string;
2953
- roundNumber: number;
2954
- roundPosition?: number;
2955
- drawPositions?: number[];
2956
- finishingRound?: number;
2957
- roundFactor?: number;
2958
- stage?: string;
2959
- isRoundRobin?: boolean;
2960
- preFeedRound?: boolean;
2961
- structureId?: string;
2962
- collectionId?: string;
2963
- }
2964
-
2965
- declare interface Score {
2966
- scoreStringSide1?: string;
2967
- scoreStringSide2?: string;
2968
- sets?: SetScore_2[];
2969
- }
2970
-
2971
- export declare interface ScorecardOptions {
2972
- matchUp: any;
2973
- composition?: any;
2974
- eventHandlers?: any;
2975
- swapSides?: boolean;
2976
- }
2977
-
2978
- export declare type ScoreOutcome = {
2979
- isValid: boolean;
2980
- sets: SetScore[];
2981
- scoreObject?: any;
2982
- winningSide?: number;
2983
- matchUpStatus?: string;
2984
- error?: string;
2985
- matchUpFormat?: string;
2986
- score?: string;
2987
- };
2988
-
2989
- /**
2990
- * Scoring configuration for courthive-components
2991
- * This provides a simple configuration object that can be modified by consumers
2992
- */
2993
- declare interface ScoringConfig {
2994
- scoringApproach?: 'freeScore' | 'dynamicSets' | 'dialPad' | 'inlineScoring';
2995
- smartComplements?: boolean;
2996
- composition?: string;
2997
- idiom?: string;
2998
- dateFormat?: string;
2999
- timeFormat?: string;
3000
- }
3001
-
3002
- export declare function scoringModal(params: ScoringModalParams): void;
3003
-
3004
- export declare type ScoringModalLabels = {
3005
- title?: string;
3006
- cancel?: string;
3007
- clear?: string;
3008
- submit?: string;
3009
- format?: string;
3010
- formatEditTitle?: string;
3011
- irregularEnding?: string;
3012
- winner?: string;
3013
- retired?: string;
3014
- walkover?: string;
3015
- defaulted?: string;
3016
- validScore?: string;
3017
- scoreIncomplete?: string;
3018
- invalidScore?: string;
3019
- scoreTips?: string;
3020
- setScores?: string;
3021
- tiebreaks?: string;
3022
- matchTiebreaks?: string;
3023
- irregularEndings?: string;
3024
- addSet?: boolean;
3025
- dynamicSetsTips?: string;
3026
- dialPadTips?: string;
3027
- };
3028
-
3029
- export declare type ScoringModalParams = {
3030
- matchUp: any;
3031
- callback: (outcome: any) => void;
3032
- onClose?: () => void;
3033
- labels?: ScoringModalLabels;
3034
- };
3035
-
3036
- export declare interface SegmentData {
3037
- participantName?: string;
3038
- drawPosition?: number;
3039
- seedNumber?: number;
3040
- entryStatus?: string;
3041
- nationalityCode?: string;
3042
- scoreString?: string;
3043
- matchUpStatus?: string;
3044
- roundName?: string;
3045
- depth: number;
3046
- matchUp?: SunburstMatchUp;
3047
- }
3048
-
3049
- export declare function selectItem(params: SelectItemParams): void;
3050
-
3051
- export declare interface SelectItemOption {
3052
- label: string;
3053
- onClick?: () => void;
3054
- [key: string]: any;
3055
- }
3056
-
3057
- export declare interface SelectItemParams {
3058
- title: string;
3059
- placeholder?: string;
3060
- options: SelectItemOption[];
3061
- selectionLimit?: number;
3062
- /** Factory to create a selection table. If not provided, a simple list is used. */
3063
- createTable?: (config: {
3064
- anchorId: string;
3065
- data: any[];
3066
- selectionLimit?: number;
3067
- onSelected: (value: any[]) => void;
3068
- }) => {
3069
- table: any;
3070
- destroy?: () => void;
3071
- };
3072
- /** Factory to create a search filter function for the table. */
3073
- createFilter?: (table: any) => (value: string) => void;
3074
- }
3075
-
3076
- /**
3077
- * Set format information returned by matchUpFormatCode.parse()
3078
- */
3079
- export declare type SetFormat = {
3080
- setTo?: number;
3081
- tiebreakAt?: number;
3082
- tiebreakFormat?: {
3083
- tiebreakTo?: number;
3084
- noAd?: boolean;
3085
- };
3086
- tiebreakSet?: {
3087
- tiebreakTo?: number;
3088
- noAd?: boolean;
3089
- };
3090
- timed?: boolean;
3091
- minutes?: number;
3092
- };
3093
-
3094
- /**
3095
- * Type definitions for scoring modal V2
3096
- */
3097
- export declare type SetScore = {
3098
- setNumber?: number;
3099
- side1Score?: number;
3100
- side2Score?: number;
3101
- side1TiebreakScore?: number;
3102
- side2TiebreakScore?: number;
3103
- side1PointScore?: string | number;
3104
- side2PointScore?: string | number;
3105
- winningSide?: number;
3106
- };
3107
-
3108
- declare interface SetScore_2 {
3109
- setNumber: number;
3110
- side1Score?: number;
3111
- side2Score?: number;
3112
- side1TiebreakScore?: number;
3113
- side2TiebreakScore?: number;
3114
- side1PointScore?: number | string;
3115
- side2PointScore?: number | string;
3116
- winningSide?: number;
3117
- }
3118
-
3119
- /**
3120
- * Set scoring configuration (can be partial)
3121
- */
3122
- export declare function setScoringConfig(config: Partial<ScoringConfig>): void;
3123
-
3124
- export declare type Severity = 'ERROR' | 'WARN' | 'INFO';
3125
-
3126
- declare interface SeverityCounts {
3127
- total: number;
3128
- ERROR: number;
3129
- WARN: number;
3130
- INFO: number;
3131
- }
3132
-
3133
- /**
3134
- * Determine if smart complement should be applied for a given input
3135
- *
3136
- * @param digit - The digit being entered
3137
- * @param isShiftPressed - Whether Shift key is pressed
3138
- * @param setIndex - Index of the current set
3139
- * @param sets - Current sets array
3140
- * @param config - Match configuration
3141
- * @param smartComplementsUsed - Set of indices where complement was already used
3142
- * @param smartComplementsEnabled - Whether feature is enabled in settings
3143
- * @returns Result indicating if/how complement should be applied
3144
- */
3145
- export declare function shouldApplySmartComplement(digit: number, isShiftPressed: boolean, setIndex: number, sets: SetScore[], config: MatchUpConfig, smartComplementsUsed: Set<number>, smartComplementsEnabled: boolean): SmartComplementResult;
3146
-
3147
- /**
3148
- * Determine if a new set row should be created
3149
- */
3150
- export declare function shouldCreateNextSet(currentSetIndex: number, sets: SetScore[], config: MatchUpConfig): boolean;
3151
-
3152
- /**
3153
- * Determine if tiebreak input should be visible for a set
3154
- */
3155
- export declare function shouldShowTiebreak(setIndex: number, scores: {
3156
- side1: number;
3157
- side2: number;
3158
- }, config: MatchUpConfig): boolean;
3159
-
3160
- export declare function showCourtAvailabilityModal(config: CourtAvailabilityModalConfig): Promise<void>;
3161
-
3162
- declare interface Side {
3163
- sideNumber: number;
3164
- drawPosition?: number;
3165
- participant?: Participant;
3166
- participantFed?: string;
3167
- sourceMatchUp?: MatchUp;
3168
- qualifier?: boolean;
3169
- bye?: boolean;
3170
- lineUp?: LineUp[];
3171
- score?: SideScore;
3172
- seedNumber?: number;
3173
- seedValue?: string | number;
3174
- }
3175
-
3176
- declare interface SideScore {
3177
- scoreStringSide?: string;
3178
- games?: number;
3179
- points?: number;
3180
- }
3181
-
3182
- /**
3183
- * Result of smart complement calculation
3184
- */
3185
- export declare type SmartComplementResult = {
3186
- field1Value: number;
3187
- field2Value: number;
3188
- shouldApply: boolean;
3189
- reason?: string;
3190
- };
3191
-
3192
- export declare const standardTemplates: TopologyTemplate[];
3193
-
3194
- /**
3195
- * Detail payload for the `stateChanged` CustomEvent.
3196
- */
3197
- export declare interface StateChangedDetail {
3198
- matchUpId: string;
3199
- matchUp: MatchUp;
3200
- isComplete: boolean;
3201
- winningSide?: number;
3202
- }
3203
-
3204
- declare interface StructureCardCallbacks {
3205
- onSelect: (nodeId: string) => void;
3206
- onSelectEdge: (edgeId: string) => void;
3207
- onDoubleClick?: (nodeId: string) => void;
3208
- onPortMouseDown: (nodeId: string, portType: 'winner' | 'loser') => void;
3209
- onPortMouseUp: (nodeId: string) => void;
3210
- onDragStart: (nodeId: string, startX: number, startY: number) => void;
3211
- }
3212
-
3213
- /**
3214
- * BurstChart D3v7 - Tournament Sunburst Visualization
3215
- *
3216
- * Modern D3v7 implementation with emoji flags and clean TypeScript architecture.
3217
- * Consumes TODS-aligned SunburstDrawData natively.
3218
- *
3219
- * Features:
3220
- * - D3v7 partition layout
3221
- * - Emoji flags (no image dependencies)
3222
- * - Interactive hover with winner/opponent display
3223
- * - Tournament title with text wrapping
3224
- * - Color coding by seed/entry type
3225
- * - Three-line hover display (winner, score, opponent)
3226
- */
3227
- /** TODS-aligned draw structure for the sunburst */
3228
- export declare interface SunburstDrawData {
3229
- drawSize: number;
3230
- roundMatchUps: Record<number, SunburstMatchUp[]>;
3231
- seedAssignments?: {
3232
- participantId: string;
3233
- seedNumber: number;
3234
- }[];
3235
- }
3236
-
3237
- export declare interface SunburstMatchUp {
3238
- roundNumber: number;
3239
- roundName?: string;
3240
- matchUpStatus: string;
3241
- winningSide?: number;
3242
- drawPositions: number[];
3243
- scoreString?: string;
3244
- sides: SunburstSide[];
3245
- }
3246
-
3247
- export declare interface SunburstSide {
3248
- sideNumber: number;
3249
- drawPosition: number;
3250
- participantName?: string;
3251
- nationalityCode?: string;
3252
- seedNumber?: number;
3253
- entryStatus?: string;
3254
- }
3255
-
3256
- export declare interface TeamVsOptions {
3257
- side1Name: string;
3258
- side2Name: string;
3259
- sets?: any[];
3260
- winningSide?: number;
3261
- side1Id?: string;
3262
- side2Id?: string;
3263
- }
3264
-
3265
- export declare interface TemporalAdapter {
3266
- isDateAvailable: (date: string) => {
3267
- ok: boolean;
3268
- reason?: string;
3269
- };
3270
- getDayCapacityMinutes?: (date: string) => number;
3271
- }
3272
-
3273
- export declare class TemporalGrid {
3274
- private engine;
3275
- private control;
3276
- private config;
3277
- private rootElement;
3278
- private venueTreeElement;
3279
- private calendarElement;
3280
- private capacityElement;
3281
- private statsBarInstance;
3282
- private viewToolbarResult;
3283
- private datepicker;
3284
- private visibleCourts;
3285
- private initialSnapshot;
3286
- private isDirty;
3287
- constructor(config: TemporalGridConfig);
3288
- /**
3289
- * Render the component into a container
3290
- */
3291
- render(container: HTMLElement): void;
3292
- /**
3293
- * Destroy the component and cleanup
3294
- */
3295
- destroy(): void;
3296
- private createRootElement;
3297
- private renderToolbar;
3298
- /**
3299
- * Initialize the datepicker on the toolbar date input.
3300
- * Must be called after the toolbar element is in the DOM.
3301
- */
3302
- private initDatepicker;
3303
- private handleDateChange;
3304
- private renderCapacityIndicator;
3305
- private renderVenueTree;
3306
- private renderCalendar;
3307
- /** Serialize current engine state (blocks + availability) for comparison */
3308
- private takeSnapshot;
3309
- /** Compare current state to initial snapshot and update dirty flag */
3310
- private checkDirtyState;
3311
- /** Reset the snapshot (call after a successful save) */
3312
- resetDirtyState(): void;
3313
- private updateStatsBar;
3314
- private updateCapacityStats;
3315
- private updateVenueTree;
3316
- private handleEngineEvent;
3317
- private handleBlockSelected;
3318
- private handleCourtSelected;
3319
- private handleTimeRangeSelected;
3320
- private handleCourtCheckboxChange;
3321
- private handleVenueCheckboxChange;
3322
- private updateVenueCheckboxState;
3323
- /**
3324
- * Get the engine instance
3325
- */
3326
- getEngine(): TemporalEngine;
3327
- /**
3328
- * Get the controller instance
3329
- */
3330
- getControl(): TemporalGridControl | null;
3331
- /**
3332
- * Set the selected day
3333
- */
3334
- setDay(day: DayId_2): void;
3335
- /**
3336
- * Refresh the display
3337
- */
3338
- refresh(): void;
3339
- }
3340
-
3341
- declare interface TemporalGridCallbacks {
3342
- /**
3343
- * Called when dirty state changes (blocks/availability modified vs initial)
3344
- */
3345
- onDirtyChange?: (isDirty: boolean) => void;
3346
- }
3347
-
3348
- export declare interface TemporalGridConfig extends Partial<TemporalGridControlConfig>, TemporalGridCallbacks {
3349
- /**
3350
- * Tournament record (TODS format)
3351
- */
3352
- tournamentRecord: any;
3353
- /**
3354
- * Engine configuration overrides
3355
- */
3356
- engineConfig?: {
3357
- dayStartTime?: string;
3358
- dayEndTime?: string;
3359
- slotMinutes?: number;
3360
- };
3361
- /**
3362
- * Initial selected day
3363
- */
3364
- initialDay?: DayId_2;
3365
- /**
3366
- * Show facility tree
3367
- */
3368
- showVenueTree?: boolean;
3369
- /**
3370
- * Show capacity indicator
3371
- */
3372
- showCapacity?: boolean;
3373
- /**
3374
- * Show toolbar
3375
- */
3376
- showToolbar?: boolean;
3377
- /**
3378
- * i18n labels
3379
- */
3380
- labels?: TemporalGridLabels;
3381
- /**
3382
- * Language code for datepicker localization (e.g. 'en', 'fr', 'de')
3383
- */
3384
- language?: string;
3385
- /**
3386
- * Callback when "Set Default Availability" is clicked
3387
- */
3388
- onSetDefaultAvailability?: () => void;
3389
- /**
3390
- * Callback when "Save to Tournament" is clicked
3391
- */
3392
- onSave?: () => void;
3393
- /**
3394
- * Callback when mutations are applied
3395
- */
3396
- onMutationsApplied?: (mutations: any[]) => void;
3397
- }
3398
-
3399
- declare class TemporalGridControl {
3400
- private readonly engine;
3401
- private timeline;
3402
- private readonly config;
3403
- private unsubscribe;
3404
- private currentItems;
3405
- private isRendering;
3406
- private popoverManager;
3407
- private viewState;
3408
- private currentDay;
3409
- private currentView;
3410
- private selectedCourts;
3411
- private visibleCourts;
3412
- constructor(engine: TemporalEngine, config: TemporalGridControlConfig);
3413
- private initialize;
3414
- /**
3415
- * Ensure timeline exists. Defers creation to the next macro-task so the
3416
- * container has layout dimensions (matches the working story pattern).
3417
- */
3418
- private ensureTimeline;
3419
- /**
3420
- * Build the current view data from the engine.
3421
- */
3422
- /**
3423
- * Get the list of days visible in the current view.
3424
- */
3425
- getViewDays(): string[];
3426
- private buildViewData;
3427
- /**
3428
- * Create the timeline with initial data already populated.
3429
- */
3430
- private createTimelineWithData;
3431
- /** Set the selected day (public API) */
3432
- setDay(day: DayId): void;
3433
- /** Get current selected day */
3434
- getDay(): DayId | null;
3435
- /** Set view mode */
3436
- setView(view: string): void;
3437
- /** Set a named view preset (day/days3/week/all) */
3438
- setViewPreset(viewKey: string): void;
3439
- /** Select courts for multi-court operations */
3440
- setSelectedCourts(courts: CourtRef[]): void;
3441
- /** Get selected courts */
3442
- getSelectedCourts(): CourtRef[];
3443
- /** Set which courts are visible in the timeline */
3444
- setVisibleCourts(courts: Set<string> | null): void;
3445
- /** Set layer visibility */
3446
- setLayerVisibility(layerId: BlockType, visible: boolean): void;
3447
- /** Refresh the calendar display */
3448
- refresh(): void;
3449
- /** Destroy the controller and cleanup */
3450
- destroy(): void;
3451
- private updateTimelineWindow;
3452
- private render;
3453
- /**
3454
- * onMove: Called when user finishes dragging or resizing an item.
3455
- * Returns true to accept, false to reject.
3456
- */
3457
- private handleOnMove;
3458
- /**
3459
- * onMoving: Live validation during drag (optional visual feedback).
3460
- * Destroys active popover, clamps to court availability.
3461
- * Returns clamped start/end, or null to reject.
3462
- */
3463
- private handleOnMoving;
3464
- /**
3465
- * Timeline click handler: Routes to popover based on item type.
3466
- * Handles ghost confirmation (multi-row create) and block click → popover.
3467
- */
3468
- private handleTimelineClick;
3469
- /**
3470
- * Multi-row ghost creation handler.
3471
- * Called when user confirms a ghost spanning one or more court rows.
3472
- * Creates one block per court via engine.applyBlock.
3473
- */
3474
- private handleMultiRowCreate;
3475
- /** Get the popover manager (for external access) */
3476
- getPopoverManager(): BlockPopoverManager;
3477
- private handleEngineEvent;
3478
- /** Snap a date to the nearest N-minute increment */
3479
- private snapToMinutes;
3480
- /**
3481
- * Format a Date as a local-time ISO string (no timezone offset).
3482
- * Engine stores times as wall-clock strings like "2026-06-15T09:00:00".
3483
- * toISOString() converts to UTC which shifts the time by the local offset.
3484
- */
3485
- private toLocalISO;
3486
- /** Show conflict dialog */
3487
- private showConflictDialog;
3488
- /** Get timeline instance (for advanced usage) */
3489
- getTimeline(): CourtTimeline | null;
3490
- /** Get engine instance */
3491
- getEngine(): TemporalEngine;
3492
- /** Get view state (for external consumers to subscribe to view changes) */
3493
- getViewState(): TemporalViewState;
3494
- }
3495
-
3496
- declare interface TemporalGridControlConfig {
3497
- /** Container element for the timeline */
3498
- container: HTMLElement;
3499
- /** Initial selected day */
3500
- initialDay?: DayId;
3501
- /** Initial view mode */
3502
- initialView?: 'day' | 'week';
3503
- /** Resource grouping mode */
3504
- groupingMode?: ResourceGroupingMode;
3505
- /** Whether to show conflict indicators */
3506
- showConflicts?: boolean;
3507
- /** Whether segments should have labels */
3508
- showSegmentLabels?: boolean;
3509
- /** Custom color scheme */
3510
- colorScheme?: typeof DEFAULT_COLOR_SCHEME;
3511
- /** Callback when a block is selected */
3512
- onBlockSelected?: (blockId: string) => void;
3513
- /** Callback when a court is selected */
3514
- onCourtSelected?: (court: CourtRef) => void;
3515
- /** Callback when time range is selected */
3516
- onTimeRangeSelected?: (params: {
3517
- courts: CourtRef[];
3518
- start: string;
3519
- end: string;
3520
- }) => void;
3521
- /** Callback when engine blocks change (for stats bar, external consumers) */
3522
- onBlocksChanged?: () => void;
3523
- /** Callback when a day label is double-clicked (for navigating to 1-Day view) */
3524
- onDayNavigate?: (day: string) => void;
3525
- }
3526
-
3527
- /**
3528
- * i18n labels for the temporal grid component.
3529
- * All fields are optional — English defaults are used when omitted.
3530
- */
3531
- export declare interface TemporalGridLabels {
3532
- view?: string;
3533
- day1?: string;
3534
- days3?: string;
3535
- week?: string;
3536
- tournament?: string;
3537
- courtAvailability?: string;
3538
- totalHours?: string;
3539
- blocked?: string;
3540
- available?: string;
3541
- avgPerCourt?: string;
3542
- setDefaultAvailability?: string;
3543
- saveToTournament?: string;
3544
- }
3545
-
3546
- declare class TemporalViewState {
3547
- private selectedDay;
3548
- private selectedVenue;
3549
- private selectedCourt;
3550
- private readonly layerVisibility;
3551
- private readonly listeners;
3552
- setSelectedDay(day: DayId_3): void;
3553
- getSelectedDay(): DayId_3 | null;
3554
- setSelectedVenue(venueId: string | null): void;
3555
- getSelectedVenue(): string | null;
3556
- setSelectedCourt(courtId: string | null): void;
3557
- getSelectedCourt(): string | null;
3558
- setLayerVisibility(layerId: BlockType_2, visible: boolean): void;
3559
- getLayerVisibility(): Map<BlockType_2, boolean>;
3560
- isLayerVisible(layerId: BlockType_2): boolean;
3561
- getSnapshot(): ViewStateSnapshot;
3562
- subscribe(listener: ViewChangeListener): () => void;
3563
- private emit;
3564
- }
3565
-
3566
- export declare function tennisCourt(className: string): SVGSVGElement;
3567
-
3568
- declare interface TimelineGroupData {
3569
- id: string;
3570
- content: string;
3571
- order?: number;
3572
- courtRef?: CourtRef_2;
3573
- surface?: string;
3574
- indoor?: boolean;
3575
- hasLights?: boolean;
3576
- tags?: string[];
3577
- }
3578
-
3579
- declare interface TimelineItemData {
3580
- id: string;
3581
- group: string;
3582
- content: string;
3583
- start: Date | string;
3584
- end?: Date | string;
3585
- type?: 'range' | 'background';
3586
- className?: string;
3587
- style?: string;
3588
- title?: string;
3589
- editable?: boolean | {
3590
- updateTime?: boolean;
3591
- updateGroup?: boolean;
3592
- remove?: boolean;
3593
- };
3594
- blockId?: string;
3595
- status?: string;
3596
- reason?: string;
3597
- isBlock?: boolean;
3598
- isSegment?: boolean;
3599
- isConflict?: boolean;
3600
- }
3601
-
3602
- declare interface TimelineOptions {
3603
- /** Visible window start */
3604
- start?: Date;
3605
- /** Visible window end */
3606
- end?: Date;
3607
- /** Minimum allowed date (pan limit) */
3608
- min?: Date;
3609
- /** Maximum allowed date (pan limit) */
3610
- max?: Date;
3611
- /** Minimum visible duration in ms (zoom limit) */
3612
- zoomMin?: number;
3613
- /** Maximum visible duration in ms (zoom limit) */
3614
- zoomMax?: number;
3615
- /** Snap function: given a Date, return snapped Date */
3616
- snap?: (date: Date) => Date;
3617
- /** Row height in pixels (default 40) */
3618
- rowHeight?: number;
3619
- /** Time axis formatting */
3620
- timeAxis?: {
3621
- scale: string;
3622
- step: number;
3623
- };
3624
- /** Whether to show tooltips on hover */
3625
- showTooltips?: boolean;
3626
- /** Enable pinch-to-zoom (ctrl+wheel). Default false. */
3627
- enablePinchZoom?: boolean;
3628
- /** Height of the container (CSS value) */
3629
- height?: string;
3630
- }
3631
-
3632
- export declare function tipster(params: TipsterParams): Instance | undefined;
3633
-
3634
- declare type TipsterParams = {
3635
- title?: string;
3636
- options?: any[];
3637
- menuItems?: any[];
3638
- coords?: any;
3639
- callback?: (result: any) => void;
3640
- config?: any;
3641
- target?: HTMLElement;
3642
- items?: any[];
3643
- };
3644
-
3645
- export declare const toggleOverlay: ({ target }: {
3646
- target: HTMLElement;
3647
- }) => (rows?: any[]) => void;
3648
-
3649
- declare interface ToolbarCallbacks {
3650
- onAddStructure: (stage: string, structureType?: string) => void;
3651
- onLoadTemplate: (template: TopologyTemplate) => void;
3652
- onAutoLayout: () => void;
3653
- onGenerate: () => void;
3654
- onSaveTemplate?: () => void;
3655
- onClear?: () => void;
3656
- }
3657
-
3658
- declare interface ToolbarOptions {
3659
- hideTemplates?: boolean;
3660
- hideGenerate?: boolean;
3661
- readOnly?: boolean;
3662
- }
3663
-
3664
- export declare interface TopologyBuilderConfig {
3665
- initialState?: Partial<TopologyState>;
3666
- onGenerate?: (state: TopologyState) => void;
3667
- onDoubleClickNode?: (node: TopologyNode, state: TopologyState) => void;
3668
- onSaveTemplate?: (state: TopologyState) => void;
3669
- onClear?: () => void;
3670
- templates?: TopologyTemplate[];
3671
- hideTemplates?: boolean;
3672
- hideGenerate?: boolean;
3673
- hideDelete?: boolean;
3674
- readOnly?: boolean;
3675
- }
3676
-
3677
- export declare class TopologyBuilderControl {
3678
- private readonly store;
3679
- private readonly layout;
3680
- private readonly unsubscribe;
3681
- private readonly config;
3682
- constructor(config?: TopologyBuilderConfig);
3683
- private buildToolbarPanel;
3684
- private buildCanvasPanel;
3685
- private handleCreateEdge;
3686
- render(container: HTMLElement): void;
3687
- destroy(): void;
3688
- autoLayout(): void;
3689
- getState(): TopologyState;
3690
- loadState(state: TopologyState): void;
3691
- private addDefaultStructure;
3692
- private scrollCanvasToNode;
3693
- private handleGenerate;
3694
- }
3695
-
3696
- export declare type TopologyChangeListener = (state: TopologyState) => void;
3697
-
3698
- export declare interface TopologyEdge {
3699
- id: string;
3700
- sourceNodeId: string;
3701
- targetNodeId: string;
3702
- linkType: 'WINNER' | 'LOSER' | 'POSITION';
3703
- sourceRoundNumber?: number;
3704
- targetRoundNumber?: number;
3705
- feedProfile?: string;
3706
- finishingPositions?: number[];
3707
- qualifyingPositions?: number;
3708
- label?: string;
3709
- }
3710
-
3711
- export declare interface TopologyNode {
3712
- id: string;
3713
- structureName: string;
3714
- stage: 'MAIN' | 'QUALIFYING' | 'CONSOLATION' | 'PLAY_OFF';
3715
- structureType: string;
3716
- drawSize: number;
3717
- qualifyingPositions?: number;
3718
- matchUpFormat?: string;
3719
- structureOptions?: any;
3720
- position: {
3721
- x: number;
3722
- y: number;
3723
- };
3724
- matchUps?: SchematicMatchUp[];
3725
- }
3726
-
3727
- export declare interface TopologyState {
3728
- nodes: TopologyNode[];
3729
- edges: TopologyEdge[];
3730
- selectedNodeId: string | null;
3731
- selectedEdgeId: string | null;
3732
- drawName: string;
3733
- templateName?: string;
3734
- }
3735
-
3736
- export declare class TopologyStore {
3737
- private state;
3738
- private listeners;
3739
- constructor(initialState?: Partial<TopologyState>);
3740
- getState(): TopologyState;
3741
- subscribe(listener: TopologyChangeListener): () => void;
3742
- private notify;
3743
- setDrawName(name: string): void;
3744
- addNode(partial: Omit<TopologyNode, 'id' | 'position'>): TopologyNode;
3745
- updateNode(nodeId: string, updates: Partial<Omit<TopologyNode, 'id'>>): void;
3746
- removeNode(nodeId: string): void;
3747
- addEdge(partial: Omit<TopologyEdge, 'id' | 'label'>): TopologyEdge | null;
3748
- updateEdge(edgeId: string, updates: Partial<Omit<TopologyEdge, 'id'>>): void;
3749
- removeEdge(edgeId: string): void;
3750
- selectNode(nodeId: string | null): void;
3751
- selectEdge(edgeId: string | null): void;
3752
- /**
3753
- * If the given node is a consolation structure, clamp its drawSize so it
3754
- * does not exceed the total capacity of inbound links.
3755
- */
3756
- private clampConsolationDrawSize;
3757
- /** Sum of losers that all inbound edges can deliver to a node. */
3758
- private inboundCapacity;
3759
- /** Find a non-overlapping position for a newly added node. */
3760
- private nextNodePosition;
3761
- autoLayout(): void;
3762
- loadState(newState: TopologyState): void;
3763
- private computeEdgeLabel;
3764
- }
3765
-
3766
- export declare interface TopologyTemplate {
3767
- name: string;
3768
- description?: string;
3769
- state: Omit<TopologyState, 'selectedNodeId' | 'selectedEdgeId'>;
3770
- }
3771
-
3772
- export declare function topologyToDrawOptions(state: TopologyState): DrawOptionsResult;
3773
-
3774
- export declare interface UIPanel<T = unknown> {
3775
- element: HTMLElement;
3776
- update: (state: T) => void;
3777
- destroy?: () => void;
3778
- }
3779
-
3780
- declare interface UIPanel_2<T = unknown> {
3781
- element: HTMLElement;
3782
- update: (state: T) => void;
3783
- destroy?: () => void;
3784
- }
3785
-
3786
- declare interface UIPanel_3<T = unknown> {
3787
- element: HTMLElement;
3788
- update: (state: T) => void;
3789
- destroy?: () => void;
3790
- }
3791
-
3792
- declare interface UIPanel_4<S> {
3793
- element: HTMLElement;
3794
- update(state: S): void;
3795
- }
3796
-
3797
- export declare function updateHeadingSelect(toolbar: HTMLElement, level: number | false): void;
3798
-
3799
- /**
3800
- * Update the aggregate tie score in-place (avoids full re-render).
3801
- */
3802
- export declare function updateTieScore(result: any, side1Id?: string, side2Id?: string, swapSides?: boolean): void;
3803
-
3804
- export declare function updateToolbarState(toolbar: HTMLElement, activeMap: Record<string, boolean>): void;
3805
-
3806
- export declare function validateProfile({ profile, temporal, dependencies, venueOrder }: ValidateProfileParams): ValidationResult[];
3807
-
3808
- declare interface ValidateProfileParams {
3809
- profile: SchedulingProfile;
3810
- temporal?: TemporalAdapter;
3811
- dependencies?: DependencyAdapter;
3812
- venueOrder?: string[];
3813
- }
3814
-
3815
- export declare function validateSchedulingPolicy(data: SchedulingPolicyData): SchedulingValidationResult[];
3816
-
3817
- export declare function validateTopology(state: TopologyState): ValidationError[];
3818
-
3819
- export declare type ValidationCode = 'DATE_UNAVAILABLE' | 'DUPLICATE_ROUND' | 'DUPLICATE_SEGMENT' | 'INVALID_SEGMENT_CONFIG' | 'ROUND_ORDER_VIOLATION' | 'DEPENDENCY_VIOLATION' | 'DAY_OVERLOAD' | 'DROP_REJECTED';
3820
-
3821
- export declare interface ValidationError {
3822
- severity: 'error' | 'warning';
3823
- message: string;
3824
- nodeId?: string;
3825
- edgeId?: string;
3826
- }
3827
-
3828
- export declare interface ValidationResult {
3829
- code: ValidationCode;
3830
- severity: Severity;
3831
- message: string;
3832
- context: {
3833
- date?: string;
3834
- venueId?: string;
3835
- scope?: string;
3836
- drawId?: string;
3837
- structureId?: string;
3838
- locator?: RoundLocator;
3839
- prerequisite?: RoundLocator;
3840
- demandMinutes?: number;
3841
- capacityMinutes?: number;
3842
- ratio?: number;
3843
- reason?: string;
3844
- };
3845
- fixActions?: FixAction[];
3846
- }
3847
-
3848
- /**
3849
- * Validate input field and update UI with success/error styling.
3850
- *
3851
- * OVERVIEW:
3852
- * Runs a validation function on input value and updates the input field and help text
3853
- * with appropriate styling (success=green, error=red) and error messages. Used by
3854
- * renderField to provide real-time validation feedback.
3855
- *
3856
- * PARAMETERS:
3857
- * @param item - Field configuration object containing error message
3858
- * @param e - Event object with target.value containing input value
3859
- * @param input - Input element to add success/error classes to
3860
- * @param help - Help text element to display error message
3861
- * @param fx - Validation function that returns true if valid, false if invalid
3862
- *
3863
- * ============================================================================
3864
- * BEHAVIOR
3865
- * ============================================================================
3866
- *
3867
- * VALIDATION FLOW:
3868
- * 1. Extract value from e.target.value
3869
- * 2. Call validation function fx(value)
3870
- * 3. If invalid (fx returns false):
3871
- * - Set help text to item.error or 'Invalid'
3872
- * - Remove 'is-success' class from input
3873
- * - Add 'is-danger' class to input (red border)
3874
- * - Add 'is-danger' class to help (red text)
3875
- * 4. If valid (fx returns true):
3876
- * - Clear help text
3877
- * - Remove 'is-danger' classes
3878
- * - Add 'is-success' class to input (green border)
3879
- *
3880
- * VISUAL FEEDBACK:
3881
- * - Invalid: Red border on input + red error message below
3882
- * - Valid: Green border on input + no message
3883
- * - Neutral: No border color + no message (before first input)
3884
- *
3885
- * ============================================================================
3886
- * VALIDATION FUNCTIONS
3887
- * ============================================================================
3888
- *
3889
- * Validation functions should:
3890
- * - Accept a string value parameter
3891
- * - Return true if valid, false if invalid
3892
- * - Be synchronous (no async validation)
3893
- *
3894
- * COMMON VALIDATORS:
3895
- * - nameValidator(minLength) - checks minimum character length
3896
- * - emailValidator() - validates email format
3897
- * - passwordValidator() - checks password requirements
3898
- * - numericRange(min, max) - validates number is in range
3899
- * - Custom: (value) => value.length > 0 && value.includes('@')
3900
- *
3901
- * ============================================================================
3902
- * USAGE NOTES
3903
- * ============================================================================
3904
- *
3905
- * TYPICAL USAGE:
3906
- * - Called automatically by renderField when validator property is set
3907
- * - Attached to 'input' event for real-time validation
3908
- * - Rarely called directly - use via renderField configuration
3909
- *
3910
- * ERROR MESSAGES:
3911
- * - Set via item.error property in field configuration
3912
- * - Default message is 'Invalid' if item.error not provided
3913
- * - Should be clear and actionable (e.g., "Minimum 5 characters")
3914
- *
3915
- * STYLING:
3916
- * - Uses CSS classes: is-success, is-danger
3917
- * - Input field gets colored border
3918
- * - Help text appears below input with matching color
3919
- *
3920
- * ============================================================================
3921
- * EXAMPLE USAGE
3922
- * ============================================================================
3923
- *
3924
- * @example
3925
- * // Automatic usage via renderField
3926
- * const field = renderField({
3927
- * label: 'Username',
3928
- * field: 'username',
3929
- * validator: (value) => value.length >= 5,
3930
- * error: 'Username must be at least 5 characters'
3931
- * });
3932
- * // validator() is called automatically on input event
3933
- *
3934
- * @example
3935
- * // Direct usage (rare)
3936
- * const input = document.getElementById('email');
3937
- * const help = document.getElementById('email-help');
3938
- * const item = { error: 'Invalid email format' };
3939
- * const emailValidator = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
3940
- *
3941
- * input.addEventListener('input', (e) => {
3942
- * validator(item, e, input, help, emailValidator);
3943
- * });
3944
- *
3945
- * @example
3946
- * // Custom validator with multiple conditions
3947
- * const passwordValidator = (value) => {
3948
- * return value.length >= 8 &&
3949
- * /[A-Z]/.test(value) &&
3950
- * /[0-9]/.test(value);
3951
- * };
3952
- * const field = renderField({
3953
- * label: 'Password',
3954
- * field: 'password',
3955
- * type: 'password',
3956
- * validator: passwordValidator,
3957
- * error: 'Password must be 8+ chars with uppercase and number'
3958
- * });
3959
- */
3960
- export declare function validator(item: any, e: any, input: HTMLElement, help: HTMLElement, fx?: (value: string) => boolean): void;
3961
-
3962
- export declare namespace validators {
3963
- export {
3964
- nameValidator,
3965
- numericValidator,
3966
- numericRange,
3967
- passwordValidator,
3968
- dateValidator,
3969
- wordValidator,
3970
- emailValidator
3971
- }
3972
- }
3973
-
3974
- declare interface VenueBoardCallbacks {
3975
- onDrop: (drag: DragPayload, drop: DropTarget) => void;
3976
- onCardClick: (locator: RoundLocator) => void;
3977
- onCardContextMenu?: (locator: RoundLocator, target: HTMLElement) => void;
3978
- }
3979
-
3980
- export declare interface VenueInfo {
3981
- venueId: string;
3982
- name: string;
3983
- }
3984
-
3985
- export declare interface VenueSchedule {
3986
- venueId: string;
3987
- rounds: RoundProfile[];
3988
- }
3989
-
3990
- declare interface ViewChangeEvent {
3991
- type: 'VIEW_CHANGED';
3992
- payload: Partial<ViewStateSnapshot>;
3993
- }
3994
-
3995
- declare type ViewChangeListener = (event: ViewChangeEvent) => void;
3996
-
3997
- declare interface ViewStateSnapshot {
3998
- selectedDay: DayId_3 | null;
3999
- selectedVenue: string | null;
4000
- selectedCourt: string | null;
4001
- layerVisibility: Map<BlockType_2, boolean>;
4002
- }
4003
-
4004
- declare const wordValidator: (minWords: number, maxWords?: number) => (value: string) => boolean;
4005
-
4006
- export { }
1
+ export { renderParticipant } from './components/renderStructure/renderParticipant';
2
+ export { renderParticipantInput } from './components/renderStructure/renderParticipantInput';
3
+ export { renderRoundHeader } from './components/renderStructure/renderRoundHeader';
4
+ export { renderStructure } from './components/renderStructure/renderStructure';
5
+ export { renderContainer } from './components/renderStructure/renderContainer';
6
+ export { renderMatchUp } from './components/renderStructure/renderMatchUp';
7
+ export { compositions } from './compositions/compositions';
8
+ export { resolvePublishedComposition } from './compositions/resolvePublishedComposition';
9
+ export type { DisplayExtensionValue } from './compositions/resolvePublishedComposition';
10
+ export { renderRound } from './components/renderStructure/renderRound';
11
+ export { renderSchematicStructure, renderSchematicRound, renderSchematicMatchUp } from './components/renderSchematicStructure';
12
+ export type { SchematicMatchUp } from './components/renderSchematicStructure';
13
+ export { cModal } from './components/modal/cmodal';
14
+ export { getMockParticipantsModal } from './components/modal/mockParticipants';
15
+ export type { MockParticipantsConfig } from './components/modal/mockParticipants';
16
+ export { getGenerateTeamsModal } from './components/modal/generateTeamsModal';
17
+ export type { GenerateTeamsConfig } from './components/modal/generateTeamsModal';
18
+ export { openCompositionEditorModal } from './components/modal/compositionEditorModal';
19
+ export type { CompositionEditorResult, CompositionEditorOptions } from './components/modal/compositionEditorModal';
20
+ export { openScheduleCellConfigModal } from './components/modal/scheduleCellConfigModal';
21
+ export type { ScheduleCellDisplayConfig, ScheduleCellConfigOptions } from './components/modal/scheduleCellConfigModal';
22
+ export { getMatchUpFormatModal } from './components/matchUpFormat/matchUpFormat';
23
+ export { getAgeCategoryModal } from './components/categories/ageCategory/ageCategory';
24
+ export type { AgeCategoryConfig } from './components/categories/ageCategory/ageCategory';
25
+ export { getCategoryModal } from './components/categories/category/category';
26
+ export type { CategoryConfig, Category } from './components/categories/category/category';
27
+ export { getFlightProfileModal } from './components/flightProfile/flightProfileNew';
28
+ export type { FlightProfileConfig } from './components/flightProfile/flightProfileNew';
29
+ export { scoringModal } from './components/scoring/scoringModal';
30
+ export { setScoringConfig, getScoringConfig, resetScoringConfig } from './components/scoring/config';
31
+ export type { ScoringModalParams, ScoringModalLabels, ScoreOutcome, SetScore } from './components/scoring/types';
32
+ export { getSetFormatForIndex, isSetTiebreakOnly, isSetTimed, getMaxAllowedScore, isSetComplete, getSetWinner, isMatchComplete, getMatchWinner, calculateComplement, shouldApplySmartComplement, shouldShowTiebreak, shouldCreateNextSet, buildSetScore } from './components/scoring/logic/dynamicSetsLogic';
33
+ export type { SetFormat, MatchUpConfig, SmartComplementResult } from './components/scoring/logic/dynamicSetsLogic';
34
+ export { drawer, initDrawer } from './components/drawer/drawer';
35
+ export type { DrawerOptions } from './components/drawer/drawer';
36
+ export { notesToolbar, updateToolbarState, updateHeadingSelect } from './components/notes-toolbar/notesToolbar';
37
+ export type { NotesToolbarOptions } from './components/notes-toolbar/notesToolbar';
38
+ export { tipster, destroyTipster } from './components/popover/tipster';
39
+ export { tennisCourt, basketballCourt, baseballDiamond, hockeyRink, pickleballCourt, badmintonCourt, padelCourt } from './components/courts';
40
+ export { courthiveComponentsVersion } from './version';
41
+ export { MATCH_FORMATS } from './constants/matchUpFormats';
42
+ export type { MatchUpFormatCode } from './constants/matchUpFormats';
43
+ export { renderButtons } from './components/forms/renderButtons';
44
+ export { renderField, renderOptions } from './components/forms/renderField';
45
+ export { renderForm } from './components/forms/renderForm';
46
+ export { renderMenu } from './components/forms/renderMenu';
47
+ export { validator } from './components/forms/renderValidator';
48
+ export * as validators from './validators';
49
+ export { DrawStateManager } from './helpers/drawStateManager';
50
+ export type { RenderCallback } from './helpers/drawStateManager';
51
+ export { burstChart } from './components/burstChart/burstChart';
52
+ export type { SunburstDrawData, SunburstMatchUp, SunburstSide, SegmentData, BurstChartEventHandlers, BurstChartOptions, BurstChartInstance } from './components/burstChart/burstChart';
53
+ export { fromFactoryDrawData, fromLegacyDraw } from './components/burstChart/matchUpTransform';
54
+ export { controlBar } from './components/controlBar/controlBar';
55
+ export { toggleOverlay } from './components/controlBar/toggleOverlay';
56
+ export { dropDownButton } from './components/button/dropDownButton';
57
+ export { barButton } from './components/button/barButton';
58
+ export { selectItem } from './components/modal/selectItem';
59
+ export type { SelectItemParams, SelectItemOption } from './components/modal/selectItem';
60
+ export { SchedulingProfileControl, ProfileStore, createSchedulingProfile, validateProfile, buildIssueIndex, applyDropCommit, filterCatalog, groupCatalog, getPlannedRoundKeys, getVenueRounds, getRoundAt, findIssuesForLocator, maxSeverity, buildDateStrip, buildVenueBoard, buildRoundCatalog, buildInspectorPanel, buildIssuesPanel, buildRoundCard, createCardPopoverManager, buildSchedulingProfileLayout } from './components/scheduling-profile';
61
+ export { createTemporalGrid, TemporalGrid, showCourtAvailabilityModal } from './components/temporal-grid';
62
+ export type { TemporalGridConfig, TemporalGridLabels } from './components/temporal-grid';
63
+ export { TopologyBuilderControl, TopologyStore, topologyToDrawOptions, validateTopology, generatePreviewMatchUps, standardTemplates, buildTopologyCanvas, buildStructureCard, getPortPosition, buildNodeEditor, buildEdgeEditor, buildToolbar, buildTopologyBuilderLayout } from './components/topology-builder';
64
+ export type { TopologyNode, TopologyEdge, TopologyState, TopologyChangeListener, TopologyBuilderConfig, TopologyTemplate, DrawOptionsResult, ValidationError } from './components/topology-builder';
65
+ export type { SchedulingProfile, ScheduleDay, VenueSchedule, RoundProfile, RoundSegment, VenueInfo, CatalogRoundItem, CatalogGroupBy, RoundKey, RoundLocator, DragPayload, DropTarget, DropResult, Severity, ValidationCode, FixAction, ValidationResult, IssueIndex, ProfileStoreState, SchedulingProfileConfig, TemporalAdapter, DemandAdapter, DependencyAdapter, UIPanel } from './components/scheduling-profile';
66
+ export { SchedulePageControl, SchedulePageStore, createSchedulePage, filterMatchUpCatalog, groupMatchUpCatalog, isCompletedStatus, buildScheduleIssueIndex, matchUpLabel, participantLabel, matchUpSearchKey, buildScheduleDateStrip, buildScheduleIssuesPanel, buildMatchUpCatalog, buildMatchUpCard, buildScheduleInspectorPanel, buildCourtGridSlot, buildSchedulePageLayout, buildScheduleGridCell, mapMatchUpToCellData, DEFAULT_SCHEDULE_CELL_CONFIG, activateScheduleCellTypeAhead, buildActiveStripPanel } from './components/schedule-page';
67
+ export type { CatalogMatchUpItem, CatalogFilters, MatchUpSide, ScheduleDate, ScheduleIssue, ScheduleIssueSeverity, ScheduleIssueIndex, ScheduleIssueCounts, MatchUpCatalogGroupBy, ScheduledBehavior, SchedulingMode, PendingScheduleAction, CatalogMatchUpDragPayload, GridMatchUpDragPayload, SchedulePageDragPayload, SchedulePageConfig, SchedulePageState, SchedulePageChangeListener, ScheduleCellConfig, ScheduleCellField, ParticipantDisplayConfig, ScheduleCellData, ScheduleCellSide, ScheduleCellTypeAheadOptions, ActiveStripPanel, ActiveStripPanelCallbacks, ActiveStripPanelData, ActiveStripPanelOptions, ActiveStripCourtMeta } from './components/schedule-page';
68
+ export { createCompositionEditor } from './components/composition-editor/compositionEditor';
69
+ export { CompositionEditorStore } from './components/composition-editor/compositionEditorStore';
70
+ export type { CompositionEditorConfig, SavedComposition, CompositionEditorState, CompositionEditorListener, SectionId as CompositionEditorSectionId, EditorPanel as CompositionEditorPanel } from './components/composition-editor/compositionEditorTypes';
71
+ export { createPrintCompositionEditor } from './components/print-composition-editor/printCompositionEditor';
72
+ export type { PrintCompositionConfig, PrintCompositionEditorConfig, PrintCompositionEditorHandle, PrintType, HeaderLayout as PrintHeaderLayout, FooterLayout as PrintFooterLayout, PageSize as PrintPageSize, PageOrientation as PrintPageOrientation } from './components/print-composition-editor/printCompositionEditorTypes';
73
+ export { renderScorecard, renderTeamVsHeader, updateTieScore } from './components/scorecard';
74
+ export type { ScorecardOptions, TeamVsOptions } from './components/scorecard';
75
+ export { InlineScoringManager, renderInlineMatchUp, engineToMatchUp, createInlineScoringFooter } from './components/inline-scoring';
76
+ export type { InlineScoringMode, InlineScoringConfig, InlineScoringCallbacks, InlineScoringEngineState } from './components/inline-scoring';
77
+ export { buildInteractiveScoringShell } from './components/interactive-scoring';
78
+ export type { InteractiveScoringShell, InteractiveScoringShellConfig, StateChangedDetail } from './components/interactive-scoring';
79
+ export { PolicyCatalogControl, PolicyCatalogStore, createPolicyCatalog, filterPolicyCatalog, groupPolicyCatalog, POLICY_TYPE_METADATA, POLICY_TYPE_GROUPS, getPolicyTypeMeta, buildPolicyCatalogPanel, buildEditorShell, buildPolicyCatalogLayout, buildJsonEditor, SchedulingEditorControl, createSchedulingEditor, SchedulingEditorStore, validateSchedulingPolicy, formatCodeLabel, emptySchedulingPolicy, buildSchedulingEditorPanel } from './components/policy-catalog';
80
+ export type { PolicyCatalogItem, PolicyCatalogState, PolicyCatalogChangeListener, PolicyCatalogConfig, PolicyEditorInstance, PolicyEditorPlugin, PolicySource, PolicyTypeGroup, PolicyTypeMeta, CatalogGroupBy as PolicyCatalogGroupBy, SchedulingPolicyData, SchedulingEditorState, SchedulingEditorSection, SchedulingEditorChangeListener, SchedulingEditorConfig, SchedulingValidationResult, ValidationSeverity as SchedulingValidationSeverity, MinutesEntry, AverageTimeEntry, RecoveryTimeEntry, MatchUpAverageTime, MatchUpRecoveryTime } from './components/policy-catalog';