@ethlete/bracket 1.0.0-next.1 → 1.0.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/fesm2022/ethlete-bracket.mjs +230 -318
- package/fesm2022/ethlete-bracket.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ethlete-bracket.d.ts +36 -26
package/package.json
CHANGED
|
@@ -27,6 +27,8 @@ declare const BRACKET_ERROR_CODES: {
|
|
|
27
27
|
readonly MISSING_MATCH_NORMALIZER: 3412;
|
|
28
28
|
/** No registered {@link BracketLayout} matches the source's tournament `mode`. */
|
|
29
29
|
readonly LAYOUT_NOT_REGISTERED: 3413;
|
|
30
|
+
/** A cell the bracket draws has no card - neither an input, the layout, nor the config names one. */
|
|
31
|
+
readonly CARD_NOT_REGISTERED: 3414;
|
|
30
32
|
};
|
|
31
33
|
|
|
32
34
|
type BracketSlotSourceKind = 'match-outcome' | 'standing-rank' | 'seed' | 'swiss-bucket' | 'bye' | 'external';
|
|
@@ -145,6 +147,7 @@ type DoubleEliminationBracketRoundType = CommonBracketRoundType | (typeof DOUBLE
|
|
|
145
147
|
type SwissBracketRoundType = (typeof SWISS_BRACKET_ROUND_TYPE)[keyof typeof SWISS_BRACKET_ROUND_TYPE];
|
|
146
148
|
type GroupBracketRoundType = (typeof GROUP_BRACKET_ROUND_TYPE)[keyof typeof GROUP_BRACKET_ROUND_TYPE];
|
|
147
149
|
type BracketRoundType = SingleEliminationBracketRoundType | DoubleEliminationBracketRoundType | SwissBracketRoundType | GroupBracketRoundType;
|
|
150
|
+
declare const TERMINAL_ROUND_SORT_PRIORITY: Partial<Record<string, number>>;
|
|
148
151
|
type BracketRoundBase<TRoundData> = {
|
|
149
152
|
/**
|
|
150
153
|
* How deep this round sits in its own bracket - 0 for the opening round, counted separately for the
|
|
@@ -185,7 +188,7 @@ type BracketMatchParticipantBase = BracketParticipantBase & {
|
|
|
185
188
|
side: MatchParticipantSide;
|
|
186
189
|
};
|
|
187
190
|
type BracketMatchParticipantWithRelationsBase = BracketMatchParticipantBase & BracketParticipantWithRelationsBase;
|
|
188
|
-
declare const createNewMatchParticipantBase: <TRoundData, TMatchData>(source: BracketDataSource<TRoundData, TMatchData>, participantId: MatchParticipantId | null, match: BracketMatchSource<TMatchData>, rounds: BracketMap<BracketRoundId, BracketRoundWithRelationsBase<TRoundData>>, matchRoundId: BracketRoundId, participants: BracketMap<MatchParticipantId, BracketParticipantWithRelationsBase
|
|
191
|
+
declare const createNewMatchParticipantBase: <TRoundData, TMatchData>(source: BracketDataSource<TRoundData, TMatchData>, participantId: MatchParticipantId | null, match: BracketMatchSource<TMatchData>, rounds: BracketMap<BracketRoundId, BracketRoundWithRelationsBase<TRoundData>>, matchRoundId: BracketRoundId, participants: BracketMap<MatchParticipantId, BracketParticipantWithRelationsBase>, sourceMatchesById?: ReadonlyMap<string, BracketMatchSource<TMatchData>>) => BracketMatchParticipantWithRelationsBase | null;
|
|
189
192
|
|
|
190
193
|
type BracketMatchId = string & {
|
|
191
194
|
_brand: 'BracketMatchId';
|
|
@@ -372,7 +375,11 @@ type BracketRoundRelationTwoToNothing<TRoundData, TMatchData> = {
|
|
|
372
375
|
upperRootRoundMatchFactor: number;
|
|
373
376
|
lowerRootRoundMatchFactor: number;
|
|
374
377
|
};
|
|
375
|
-
type
|
|
378
|
+
type BracketRoundRelationNone<TRoundData, TMatchData> = {
|
|
379
|
+
type: 'none';
|
|
380
|
+
currentRound: BracketRound<TRoundData, TMatchData>;
|
|
381
|
+
};
|
|
382
|
+
type BracketRoundRelation<TRoundData, TMatchData> = BracketRoundRelationNone<TRoundData, TMatchData> | BracketRoundRelationNothingToOne<TRoundData, TMatchData> | BracketRoundRelationOneToNothing<TRoundData, TMatchData> | BracketRoundRelationOneToOne<TRoundData, TMatchData> | BracketRoundRelationTwoToOne<TRoundData, TMatchData> | BracketRoundRelationTwoToNothing<TRoundData, TMatchData>;
|
|
376
383
|
declare const generateRoundRelationsNew: <TRoundData, TMatchData>(bracketData: Bracket<TRoundData, TMatchData>) => BracketRoundRelation<TRoundData, TMatchData>[];
|
|
377
384
|
|
|
378
385
|
type BracketMatchFactor = number;
|
|
@@ -419,14 +426,19 @@ type BracketMatchRelationTwoToNothing<TRoundData, TMatchData> = {
|
|
|
419
426
|
previousLowerMatch: BracketMatch<TRoundData, TMatchData>;
|
|
420
427
|
previousLowerRound: BracketRound<TRoundData, TMatchData>;
|
|
421
428
|
};
|
|
422
|
-
type
|
|
429
|
+
type BracketMatchRelationNone<TRoundData, TMatchData> = {
|
|
430
|
+
type: 'none';
|
|
431
|
+
currentMatch: BracketMatch<TRoundData, TMatchData>;
|
|
432
|
+
currentRound: BracketRound<TRoundData, TMatchData>;
|
|
433
|
+
};
|
|
434
|
+
type BracketMatchRelation<TRoundData, TMatchData> = BracketMatchRelationNone<TRoundData, TMatchData> | BracketMatchRelationOneToOne<TRoundData, TMatchData> | BracketMatchRelationTwoToOne<TRoundData, TMatchData> | BracketMatchRelationNothingToOne<TRoundData, TMatchData> | BracketMatchRelationOneToNothing<TRoundData, TMatchData> | BracketMatchRelationTwoToNothing<TRoundData, TMatchData>;
|
|
423
435
|
type MatchPositionMaps<TRoundData, TMatchData> = Map<BracketRoundId, Map<BracketMatchPosition, BracketMatch<TRoundData, TMatchData>>>;
|
|
424
436
|
declare const generateMatchPosition: (match: BracketMatch<unknown, unknown>, factor: BracketMatchFactor) => BracketMatchPosition;
|
|
425
437
|
declare const generateMatchRelationPositions: <TRoundData, TMatchData>(relation: BracketRoundRelation<TRoundData, TMatchData>, match: BracketMatch<TRoundData, TMatchData>) => {
|
|
426
438
|
nextRoundMatchPosition: BracketMatchPosition;
|
|
427
439
|
previousUpperRoundMatchPosition: BracketMatchPosition;
|
|
428
440
|
previousLowerRoundMatchPosition: BracketMatchPosition;
|
|
429
|
-
};
|
|
441
|
+
} | null;
|
|
430
442
|
declare const generateMatchRelationsNew: <TRoundData, TMatchData>(bracketData: Bracket<TRoundData, TMatchData>, options?: {
|
|
431
443
|
source?: {
|
|
432
444
|
matches: BracketMatchSource<TMatchData>[];
|
|
@@ -500,6 +512,14 @@ type ResolveBracketSlotOptions = BracketSlotResolutionPolicy & {
|
|
|
500
512
|
matchId: string;
|
|
501
513
|
side: MatchParticipantSide;
|
|
502
514
|
};
|
|
515
|
+
/**
|
|
516
|
+
* @internal A {@link resolveBracketSlot} that shares one memo across its calls. Valid only while the
|
|
517
|
+
* picks it was created with do not change.
|
|
518
|
+
*/
|
|
519
|
+
declare const createBracketSlotResolver: (options: BracketSlotResolutionPolicy & {
|
|
520
|
+
bracket: Bracket<unknown, unknown>;
|
|
521
|
+
picks: BracketPickSet;
|
|
522
|
+
}) => (matchId: string, side: MatchParticipantSide) => string | null;
|
|
503
523
|
/** Who the viewer's own picks put in a slot, or `null` while their picks do not reach it. */
|
|
504
524
|
declare const resolveBracketSlot: (options: ResolveBracketSlotOptions) => string | null;
|
|
505
525
|
|
|
@@ -587,6 +607,7 @@ type Spacing = {
|
|
|
587
607
|
};
|
|
588
608
|
type BracketRoundHeaderComponent<TRoundData, TMatchData> = BracketComponentType<{
|
|
589
609
|
bracketRound: BracketComponentInput<BracketRound<TRoundData, TMatchData>>;
|
|
610
|
+
bracketRoundSwissGroup?: BracketComponentInput<BracketRoundSwissGroup<TRoundData, TMatchData> | null>;
|
|
590
611
|
}>;
|
|
591
612
|
type ComponentInputValue<T> = () => {
|
|
592
613
|
[P in keyof T]: T[P] extends BracketComponentInput<infer TValue> ? TValue : never;
|
|
@@ -594,6 +615,7 @@ type ComponentInputValue<T> = () => {
|
|
|
594
615
|
type BracketMatchComponent<TRoundData, TMatchData> = BracketComponentType<{
|
|
595
616
|
bracketRound: BracketComponentInput<BracketRound<TRoundData, TMatchData>>;
|
|
596
617
|
bracketMatch: BracketComponentInput<BracketMatch<TRoundData, TMatchData>>;
|
|
618
|
+
bracketRoundSwissGroup?: BracketComponentInput<BracketRoundSwissGroup<TRoundData, TMatchData> | null>;
|
|
597
619
|
}>;
|
|
598
620
|
type BracketContinueComponent<TRoundData, TMatchData> = BracketComponentType<{
|
|
599
621
|
/** The matches whose winners advance to the next competition stage */
|
|
@@ -609,29 +631,17 @@ type BracketComponents<TRoundData, TMatchData> = {
|
|
|
609
631
|
type CreateBracketElementPartConfig = {
|
|
610
632
|
elementPartHeight: number;
|
|
611
633
|
};
|
|
612
|
-
/**
|
|
613
|
-
* A row is a part of an element.
|
|
614
|
-
*/
|
|
615
634
|
type BracketElementPart = {
|
|
616
635
|
dimensions: Dimensions;
|
|
617
636
|
};
|
|
618
|
-
declare const createBracketElementPart: (config: CreateBracketElementPartConfig) =>
|
|
619
|
-
elementPart: BracketElementPart;
|
|
620
|
-
};
|
|
637
|
+
declare const createBracketElementPart: (config: CreateBracketElementPartConfig) => BracketElementPart;
|
|
621
638
|
|
|
622
|
-
/**
|
|
623
|
-
* An element is a slice of a section.
|
|
624
|
-
* It can be a match, a header, a gap, etc.
|
|
625
|
-
*/
|
|
626
639
|
type BracketElementBase = {
|
|
627
640
|
area: string;
|
|
628
|
-
/** The dimensions of the actual element */
|
|
629
641
|
dimensions: Dimensions;
|
|
630
|
-
/** The dimensions of the container that holds the element */
|
|
631
642
|
containerDimensions: Dimensions;
|
|
632
643
|
parts: ReadonlyArray<BracketElementPart>;
|
|
633
644
|
span?: BracketElementSpanCoordinates;
|
|
634
|
-
isHidden?: boolean;
|
|
635
645
|
};
|
|
636
646
|
type HeaderBracketElement<TRoundData, TMatchData> = BracketElementBase & HeaderBracketElementDetails<TRoundData, TMatchData>;
|
|
637
647
|
type MatchBracketElement<TRoundData, TMatchData> = BracketElementBase & MatchBracketElementDetails<TRoundData, TMatchData>;
|
|
@@ -677,11 +687,7 @@ type ContinueBracketElementDetails<TRoundData, TMatchData> = {
|
|
|
677
687
|
};
|
|
678
688
|
type ContinueBracketElementToCreate<TRoundData, TMatchData> = BracketElementToCreateBase & ContinueBracketElementDetails<TRoundData, TMatchData>;
|
|
679
689
|
type BracketElementToCreate<TRoundData, TMatchData> = HeaderBracketElementToCreate<TRoundData, TMatchData> | MatchBracketElementToCreate<TRoundData, TMatchData> | GapBracketElementToCreate | ContinueBracketElementToCreate<TRoundData, TMatchData>;
|
|
680
|
-
|
|
681
|
-
type MutableBracketElement<TRoundData, TMatchData> = {
|
|
682
|
-
element: BracketElement<TRoundData, TMatchData>;
|
|
683
|
-
};
|
|
684
|
-
declare const createBracketElement: <TRoundData, TMatchData>(config: BracketElementToCreate<TRoundData, TMatchData>) => MutableBracketElement<TRoundData, TMatchData>;
|
|
690
|
+
declare const createBracketElement: <TRoundData, TMatchData>(config: BracketElementToCreate<TRoundData, TMatchData>) => BracketElement<TRoundData, TMatchData>;
|
|
685
691
|
|
|
686
692
|
type BracketSubColumn<TRoundData, TMatchData> = {
|
|
687
693
|
dimensions: Dimensions;
|
|
@@ -926,7 +932,11 @@ type CreateRoundBracketSubColumnRelativeToFirstRoundConfig<TRoundData, TMatchDat
|
|
|
926
932
|
};
|
|
927
933
|
declare const createRoundBracketSubColumnRelativeToFirstRound: <TRoundData, TMatchData>(config: CreateRoundBracketSubColumnRelativeToFirstRoundConfig<TRoundData, TMatchData>) => _ethlete_bracket.BracketSubColumn<TRoundData, TMatchData>;
|
|
928
934
|
|
|
929
|
-
declare const resolveBracketGridRowSpan: <TRoundData, TMatchData>(bracket:
|
|
935
|
+
declare const resolveBracketGridRowSpan: <TRoundData, TMatchData>(bracket: {
|
|
936
|
+
rounds: {
|
|
937
|
+
values(): Iterable<BracketRound<TRoundData, TMatchData>>;
|
|
938
|
+
};
|
|
939
|
+
}, options: CreateBracketGridConfig) => CreateBracketGridConfig;
|
|
930
940
|
|
|
931
941
|
declare const createSingleEliminationGrid: <TRoundData, TMatchData>(bracketData: Bracket<TRoundData, TMatchData>, options: CreateBracketGridConfig, components: BracketComponents<TRoundData, TMatchData>) => ComputedBracketGrid<TRoundData, TMatchData>;
|
|
932
942
|
|
|
@@ -1005,7 +1015,7 @@ type StandingPick = {
|
|
|
1005
1015
|
* The order to show a group table in before anyone moves a row: every stored pick takes the position it was
|
|
1006
1016
|
* stored on, and the participants without one follow in the order the backend listed them, filling the gaps.
|
|
1007
1017
|
*
|
|
1008
|
-
* A pick the field cannot hold is dropped rather than drawn - a position
|
|
1018
|
+
* A pick the field cannot hold is dropped rather than drawn - a position that is not an integer in
|
|
1009
1019
|
* `1..participantIds.length`, an id that is not in the field, a second pick for a position or for a
|
|
1010
1020
|
* participant already placed (the lowest position keeps it). The result is therefore always a permutation
|
|
1011
1021
|
* of `participantIds`.
|
|
@@ -1017,5 +1027,5 @@ declare const standingPickStartOrder: (options: {
|
|
|
1017
1027
|
picks: readonly StandingPick[];
|
|
1018
1028
|
}) => string[];
|
|
1019
1029
|
|
|
1020
|
-
export { BRACKET_DATA_LAYOUT, BRACKET_ERROR_CODES, BRACKET_ROUND_MIRROR_TYPE, BRACKET_SWISS_GROUP_COLOR_TYPE, BracketMap, COMMON_BRACKET_ROUND_TYPE, DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE, GROUP_BRACKET_ROUND_TYPE, SINGLE_ELIMINATION_BRACKET_ROUND_TYPE, STANDING_PICK_OUTCOME, SWISS_ADVANCE_WINS, SWISS_BRACKET_ROUND_TYPE, SWISS_ELIMINATE_LOSSES, TOURNAMENT_MODE, bracketGridNaturalWidth, calculateColumnSplitFactor, calculateLowerRoundIndex, calculateUpperLowerRatio, calculateUpperRoundIndex, createBracket, createBracketBase, createBracketContinueMasterColumn, createBracketElement, createBracketElementPart, createBracketGapMasterColumn, createBracketGrid, createBracketMasterColumn, createBracketMasterColumnSection, createBracketSubColumn, createDoubleEliminationGrid, createFoldedThirdPlaceSection, createMatchesMapBase, createNewMatchParticipantBase, createParticipantsMapBase, createRoundBracketSubColumnRelativeToFirstRound, createRoundsMapBase, createSingleEliminationGrid, createStackedDoubleEliminationGrid, createSwissGrid, curvePath, drawMan, drawSwissMan, finalizeBracketGrid, generateBracketRoundSwissGroupMaps, generateMatchPosition, generateMatchRelationPositions, generateMatchRelationsNew, generateRoundRelationsNew, getAvailableSwissGroupsForRound, getBracketContinueMatches, getSwissGroupColorType, gutterPath, isBracketContinueMatch, isBracketSlotPredictable, linePath, migrateBracketPicks, path, resolveBracketGridRowSpan, resolveBracketLayout, resolveBracketSlot, standingPickOutcome, standingPickStartOrder, verticalPath };
|
|
1021
|
-
export type { Bracket, BracketBase, BracketComponentInput, BracketComponentType, BracketComponents, BracketContinueComponent, BracketDataLayout, BracketDataSource, BracketDrawing, BracketEdge, BracketElement, BracketElementBase, BracketElementPart, BracketElementSpanCoordinates, BracketElementToCreate, BracketElementToCreateBase,
|
|
1030
|
+
export { BRACKET_DATA_LAYOUT, BRACKET_ERROR_CODES, BRACKET_ROUND_MIRROR_TYPE, BRACKET_SWISS_GROUP_COLOR_TYPE, BracketMap, COMMON_BRACKET_ROUND_TYPE, DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE, GROUP_BRACKET_ROUND_TYPE, SINGLE_ELIMINATION_BRACKET_ROUND_TYPE, STANDING_PICK_OUTCOME, SWISS_ADVANCE_WINS, SWISS_BRACKET_ROUND_TYPE, SWISS_ELIMINATE_LOSSES, TERMINAL_ROUND_SORT_PRIORITY, TOURNAMENT_MODE, bracketGridNaturalWidth, calculateColumnSplitFactor, calculateLowerRoundIndex, calculateUpperLowerRatio, calculateUpperRoundIndex, createBracket, createBracketBase, createBracketContinueMasterColumn, createBracketElement, createBracketElementPart, createBracketGapMasterColumn, createBracketGrid, createBracketMasterColumn, createBracketMasterColumnSection, createBracketSlotResolver, createBracketSubColumn, createDoubleEliminationGrid, createFoldedThirdPlaceSection, createMatchesMapBase, createNewMatchParticipantBase, createParticipantsMapBase, createRoundBracketSubColumnRelativeToFirstRound, createRoundsMapBase, createSingleEliminationGrid, createStackedDoubleEliminationGrid, createSwissGrid, curvePath, drawMan, drawSwissMan, finalizeBracketGrid, generateBracketRoundSwissGroupMaps, generateMatchPosition, generateMatchRelationPositions, generateMatchRelationsNew, generateRoundRelationsNew, getAvailableSwissGroupsForRound, getBracketContinueMatches, getSwissGroupColorType, gutterPath, isBracketContinueMatch, isBracketSlotPredictable, linePath, migrateBracketPicks, path, resolveBracketGridRowSpan, resolveBracketLayout, resolveBracketSlot, standingPickOutcome, standingPickStartOrder, verticalPath };
|
|
1031
|
+
export type { Bracket, BracketBase, BracketComponentInput, BracketComponentType, BracketComponents, BracketContinueComponent, BracketDataLayout, BracketDataSource, BracketDrawing, BracketEdge, BracketElement, BracketElementBase, BracketElementPart, BracketElementSpanCoordinates, BracketElementToCreate, BracketElementToCreateBase, BracketGradient, BracketGradientStop, BracketGrid, BracketLayoutRegistration, BracketMasterColumn, BracketMasterColumnSection, BracketMasterColumnSectionType, BracketMatch, BracketMatchBase, BracketMatchComponent, BracketMatchFactor, BracketMatchId, BracketMatchParticipant, BracketMatchParticipantBase, BracketMatchParticipantWithRelationsBase, BracketMatchPosition, BracketMatchRelation, BracketMatchRelationNone, BracketMatchRelationNothingToOne, BracketMatchRelationOneToNothing, BracketMatchRelationOneToOne, BracketMatchRelationTwoToNothing, BracketMatchRelationTwoToOne, BracketMatchShortId, BracketMatchSlot, BracketMatchSource, BracketMatchStatus, BracketMatchWithRelationsBase, BracketParticipant, BracketParticipantBase, BracketParticipantMatch, BracketParticipantWithRelationsBase, BracketPickMigration, BracketPickMigrationOptions, BracketPickSet, BracketPosition, BracketRect, BracketRound, BracketRoundBase, BracketRoundHeaderComponent, BracketRoundId, BracketRoundMapWithSwissData, BracketRoundMirrorType, BracketRoundPosition, BracketRoundRelation, BracketRoundRelationNone, BracketRoundRelationNothingToOne, BracketRoundRelationOneToNothing, BracketRoundRelationOneToOne, BracketRoundRelationTwoToNothing, BracketRoundRelationTwoToOne, BracketRoundShortId, BracketRoundSource, BracketRoundSwissData, BracketRoundSwissGroup, BracketRoundSwissGroupId, BracketRoundSwissGroupMap, BracketRoundType, BracketRoundWithRelationsBase, BracketSlotResolutionPolicy, BracketSlotSource, BracketSlotSourceKind, BracketSubColumn, BracketSubColumnSpan, BracketSwissColors, BracketSwissGroupColorType, CommonBracketRoundType, ComponentInputValue, ComputedBracketGrid, ContinueBracketElement, ContinueBracketElementDetails, ContinueBracketElementToCreate, CreateBracketContinueMasterColumnConfig, CreateBracketElementPartConfig, CreateBracketGapMasterColumnConfig, CreateBracketGridConfig, CreateBracketMasterColumnConfig, CreateBracketMasterColumnSectionConfig, CreateBracketOptions, CreateBracketSubColumnConfig, CreateFoldedThirdPlaceSectionConfig, CreateRoundBracketSubColumnRelativeToFirstRoundConfig, CurveOptions, Dimensions, DoubleEliminationBracketRoundType, DrawManDimensions, DrawSwissManDimensions, FinalizedBracketColumn, FinalizedBracketElement, FinalizedBracketMatchElementMap, FinalizedContinueBracketElement, FinalizedHeaderBracketElement, FinalizedMatchBracketElement, GapBracketElement, GapBracketElementDetails, GapBracketElementToCreate, GenerateBracketDataOptions, GroupBracketRoundType, GutterLineOptions, HeaderBracketElement, HeaderBracketElementDetails, HeaderBracketElementToCreate, LineOptions, MatchBracketElement, MatchBracketElementToCreate, MatchParticipantId, MatchParticipantShortId, MatchParticipantSide, MatchPositionMaps, MutableBracketGrid, MutableBracketMasterColumn, MutableBracketMasterColumnSection, MutableBracketSubColumn, ParticipantMatchResult, PathOptions, SingleEliminationBracketRoundType, Spacing, StandingPick, StandingPickOutcome, SwissBracketRoundType, TournamentMode };
|