npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

fansunited-widget-standing

v1.4.0

Published

Welcome to Fans United Custom Standing Game Management Widget. The widget allows staff members with sufficient permissions to create new games. You can use this widget as it is and embed it in your platform, or you can use the Management Panel to create g

Readme

Custom Standing Game Management Widget

Welcome to Fans United Custom Standing Game Management Widget. The widget allows staff members with sufficient permissions to create new games. You can use this widget as it is and embed it in your platform, or you can use the Management Panel to create games. Standing Game is a game where users must predict the standing when a game is finished. With successful installation, you can create and edit a Standing Game.

Installation and usage

The easiest way to use fansunited-widget-standing-management is to install it from npm as follows:

npm  install  fansunited-widget-standing

or:

yarn  add  fansunited-widget-standing

Here is an example how you can integrate Fans United Standing Game Management Widget:

import  'fansunited-widget-standing/style.css';
import { StandingManager } from  'fansunited-widget-standing';

const  App = () => {
return (
<StandingManager
	fansUnitedApiKey={'your-api-key'}
	fansUnitedClientId={'your-client-id'} />
);
}

Notes

  • The widget is bundled as a React component and its usage is as simple as the above example

  • Don't worry about your project's CSS. The widget's styling is done with Joy UI which is based on headless unstyle react components. This means that the widget's CSS will NOT affect yours. One important thing is that you need to import style.css file from package folder:

import 'fansunited-widget-standing/style.css';

N.B: If you are using an entry point for importing all your stylings, you need to import fansunited-widget-standing/style.css there as well

Props

type  StandingManagerProps = {
	fansUnitedApiKey: string;
	fansUnitedClientId: string;
	fansUnitedLanguage?: string;
	fansUnitedEnvironment?: string;
	sportal365Project?: string;
	sportal365Infrastructure?: 'shared' | 'betway';
	labels?: LabelsModel;
	hideSignOutButton?: boolean;
};

Fans United Standing Game Management Widget depends on Fans United JS SDK and Fans United Client API. Thats why fansUnitedApiKey and fansUnitedClientId are required. They will be provided to you from Fans United team. For other optional props here is some information:

  • fansUnitedLanguage - for our sports APIs FansUnited platform supports different languages. For now they are Bulgarian (bg), English (en), Romanian (ro), Greek (el), Slovak (sk), Serbian (sr) and Hungarian (hu). If no value given it will be set to English (en).

  • fansUnitedEnvironment - You can run the widget in the following environments: staging and production. If no value given it will be set to production (prod).

  • labels - you can easily translate all labels, UI messages, descriptions, placeholders and etc. with this prop. By default, Fans United Standing Game Management Widget is available in English so if no value is given, the widget will be translated in English.

  • sportal365Project - The Sportal365 project. Used as a request header when communicating with Sportal365 APIs.

  • sportal365Infrastructure - The Sportal365 infrastructure. Used to determine what authorization should be used when communicating with Sportal365 APIs. If no value given (when sportal365Project props is provided) it will be set to shared .

  • hideSignOutButton - The prop is used to hide the sign out button which is positioned on the top right corner on the main screen of the widget.

Translation

You can easily translate Fans United Standing Game Management Widget in your language! You just need to pass an object to labels prop with concrete keys and values and that's it! Here's an example how you can do it:

import  'fansunited-widget-standing/style.css';
import { StandingManager } from  'fansunited-widget-standing';

const labels = {
    userNotFound: 'User not found. Please try again.',
    noGamesFound: "No games were found. You can create a game by clicking the button 'Create'",
    create: 'Create',
    signOut: 'Sign out',
    name: 'Name',
    status: 'Status',
    statusDescription: 'Select the status of the game.',
    participants: 'Participants',
    creationDate: 'Created at',
    acceptUntil: 'Accept Until',
    actions: 'Actions',
    pending: 'Pending',
    settled: 'Settled',
    live: 'Live',
    open: 'Open',
    canceled: 'Canceled',
    closed: 'Closed',
    sortOrder: 'Sort order',
    ascending: 'Ascending',
    descending: 'Descending',
    itemsPerPage: 'Items per page',
    back: 'Back',
    manageGameTitle: 'Manage Standing Game',
    manageGameDescription: 'Using this form, you can manage Standing games.',
    title: 'Title',
    description: 'Description',
    cutoffTime: 'Cutoff time',
    configuration: 'Configuration',
    id: 'ID',
    points: 'Points',
    pointsDescription: 'Set the number of points awarded for each correct prediction. Points will be added to users rankings.'
    customFields: 'Custom fields',
    type: 'Type',
    relationship: 'Relationship',
    entity: 'Entity',
    images: 'Images'
    mainImage: 'Main',
    coverImage: 'Cover',
    mobileImage: 'Mobile',
    uploadImage: 'Upload Image',
    sportal365Images: 'Sportal365 Images',
    search: 'Search',
    searchImage: 'Search image',
    hideFilters: 'Hide filters',
    showFilters: 'Show filters',
    urlCopiedToClipboardMessage: 'URL copied to clipboard',
    imageDeletedMessage: 'Image deleted',
    imageResetMessage: 'The initial size of the image has been restored',
    uploadingImageMessage: 'You have successfully uploaded image',
    generateSignedInUrlErrorMessage: 'There was a problem generating signed in URL to store the image in bucket. Please try again',
    uploadingImageErrorMessage: 'There was a problem with uploading image to bucket. Please try again',
    encryptingImageErrorMessage: 'There was a problem with encrypting image before uploading it to bucket. Please try again',
    searchSportal365ImagesErrorMessage: 'There was a problem with searching images from Sportal 365 API. Please try again',
    clearImage: 'Clear image',
    copyUrl: 'Copy URL',
    viewImage: 'View image',
    cropImage: 'Crop image',
    aspectRatio: 'Aspect ratio',
    crop: 'Crop',
    reset: 'Reset',
    hideMoreImages: 'Hide more images',
    showMoreImages: 'Show more images',
    addImages: 'Add images',
    participantsDescription: 'Add participants to the game.',
    additionalFields: 'Additional fields',
    addParticipant: 'Add participant',
    participantNumber: 'Participant number',
    group: 'Group',
    undecided: 'Undecided',
    removeParticipant: 'Remove participant'
    related: 'Related',
    rules: 'Rules',
    timeFormat: 'DD.MM.YYYY, HH:mm',
    edit: 'Edit',
    clone: 'Clone',
    close: 'Close',
    pageNo: 'Page No',
    save: 'Save',
    keyDynamicFields: 'Key',
    valueDynamicFields: 'Value',
    add: 'Add',
    delete: 'Delete',
    cloneGameTitle: 'Clone Standing Game',
    resolvePredictions: 'Resolve predictions',
    outcome: "Outcome",
    noItemsToDisplay: 'No items to display',
    dragToReorder: 'Drag to reorder',
    provideIdGameErrorMessage: 'You need to provide an ID to your game!',
    provideTitleGameErrorMessage: 'You need to provide a title to your game!',
    gamesErrorMessage: 'There was a problem retrieving information about the games.',
    createGameMessage: 'You have successfully created a game.',
    editGameMessage: 'You have successfully edited a game.',
    createGameErrorMessage: 'There was a problem with creating the game. Please try again.',
    editGameErrorMessage: 'There was a problem with editing the game. Please try again.',
    requiredFieldValidationMessage: 'The following field is required: ',
    participantsValidationMessage: 'Participant __participantNumber__: __propertyLabel__ is required!',
    relatedEntitiesErrorMessage: 'There was a problem with fetching entities for related. Please try again.',
    predictionsStartingToResolveInfoMessage: 'Predictions for game __gameTitle__ are starting to resolve. Keep in mind that this operation can take a while if there are thousands of predictions.',
    resolvingPredictionsInProgressInfoMessage: 'Resolving game predictions is already in progress...',
    resolvingPredictionsMessage: 'Predictions for game __gameTitle__ are successfully resolved! Total resolved predictions: __predictionsLength__',
    branding: 'Branding',
    brandingTemplateLabel: 'Select branding',
    brandingTemplatePlaceholder: 'Choose existing branding',
    colors: 'Colors',
    urls: 'URLs',
    mainLogo: 'Main Logo',
    mobileLogo: 'Mobile logo',
    primaryColor: 'Primary color',
    secondaryColor: 'Secondary color',
    contentColor: 'Content color',
    backgroundColor: 'Background color',
    borderColor:  'Border color',
    additionalColor: 'Additional color',
    primaryUrl: 'Primary URL',
    secondaryUrl: 'Secondary URL',
    privacyPolicyUrl: 'Privacy policy URL',
    termsAndConditionsUrl: 'Terms and conditions URL',
    additionalUrl:  'Additional URL',
    backgroundImage: 'Background image',
    mobileBackgroundImage: 'Mobile background image',
    additionalImage: 'Additional image',
    selectRules: 'Select rules',
	  format: 'Format',
	  minify: 'Minify',
	  invalidJsonFormat: 'Invalid JSON format',
	  cannotMinifyInvalidJson: 'Cannot minify invalid JSON',
    language: 'Language',
    languageDescription: 'Select the language for your game.',
    flags: 'Flags',
    flagsPlaceholder: 'Type your flag and press Enter',
    translateTo: 'Translate to _language_',
    languagesModalTitle: 'Manage languages',
    languagesModalDescription: 'Select the languages you want to translate this game into.',
    languagesModalSave: 'Save',
    translationErrorMessage: 'There was a problem with translating the game. Please try again.'
};

const  App = () => {
return (
<StandingManager
	fansUnitedApiKey={'your-api-key'}
	fansUnitedClientId={'your-client-id'}
	labels={labels}/>
);
}

Here is all information about LabelsModel:

| Key | Description | Default Value | | :-------------: |:-------------:| :-----:| | userNotFound | On login screen when client gives invalid information about email or password. | User not found. Please try again. | | noGamesFound | When there are no created games for specific client, this message will appear on screen. | No games were found. You can create a game by clicking the button 'Create'. | | create | Used as label on create button. | Create | | signOut | Used as label on sign out button. | Sign out | | name | Label for name. | Name | status | Label for status. | Status | | statusDescription | Status select description. | Select the status of the game. | | participants | Label text for participants tab | Participants | | creationDate | Displayed in header of list of games. Date of created game in same format as given for timeFormat prop | Created at | | acceptUntil | Displayed in header of list of games. Date of predictions cutoff in same format as given for timeFormat prop | Accept until | | actions | Displayed in header of list of games.| Actions | | pending | Status for specific game. | Pending | | settled | Status for specific game. | Settled | | live | Status for specific game. | Live | | open | Status for specific game. | Open | | canceled | Status for specific game. | Canceled | | closed | Status for specific game. | Closed | | sortOrder | Label for sort order select input | Sort order | | ascending | Label for ascending option | Ascending | | descending | Label for descending option | Descending | | itemsPerPage | Label for items per page filter | Items per page | | back | label for back button (left arrow positioned on top-right corner). | Back | | manageGameTitle | Title on managing screen | Manage Standing Game | | manageGameDescription | Description on managing screen | Using this form, you can manage Standing games. | | title | Label for title input | Title | | description | Label for description input field when creating/editing a game. | Description | | cutoffTime | Title for choosing a cutoff time for game. | Cutoff time | | configuration | Label for configuration accordion | Configuration | | id | Label for ID input field. | ID | | points | Label for points configuration number input | Points | | pointsDescription | Description for points configuration number input | Set the number of points awarded for each correct prediction. Points will be added to users rankings. | | customFields | Label for custom fields accordion. | Custom fields | | type | Label for type input in related relationship. | Type | | relationship | Label for relationship input in related relationship. | Relationship | | entity | Label for entity input in related relationship. | Entity | | keyDynamicFields | Label for key input. | Key | | valueDynamicFields | Label for value input. | Value | | images | Title for images container. | Images | | mainImage | Title for main image. | Main | | coverImage | Title for cover image. | Cover | | mobileImage | Title for mobile image. | Mobile | | uploadImage | Label for upload button in images accordion | Upload Image | | sportal365Images | Label for sportal365 images button | Sportal365 Images | | search | Label for search button | Search | | searchImage | Placeholder for input search in sportal365 | Search image | | hideFilters | Label for hide filters for sportal365 images hyperlink | Hide filters | | showFilters | Label for show filters for sportal365 images hyperlink | Show filters | | urlCopiedToClipboardMessage | Toast info message when image URL is copied | URL copied to clipboard | | imageDeletedMessage | Toast info message when image is deleted | Image deleted | | imageResetMessage | Toast info message when image size is restored | The initial size of the image has been restored | | uploadingImageMessage | Toast success message when uploading image to bucket | You have successfully uploaded image | | generateSignedInUrlErrorMessage | Toast error message when trying to receive a signed in URL. | There was a problem generating signed in URL to store the image in bucket. Please try again | | uploadingImageErrorMessage | Toast error message when uploading image to bucket | There was a problem with uploading image to bucket. Please try again | | encryptingImageErrorMessage | Toast error message when encrypting image before uploading it to bucket | There was a problem with encrypting image before uploading it to bucket. Please try again | | searchSportal365ImagesErrorMessage | Toast error message when searching images from Sportal 365 API | There was a problem with searching images from Sportal 365 API. Please try again | | clearImage | Tooltip for clear image button | Clear image | | copyUrl | Tooltip for copy url image button | Copy URL | | viewImage | Tooltip for view image button | View image | | cropImage | Tooltip for crop image button | Crop image | | aspectRatio | Label for aspect ratio select | Aspect ratio | | crop | Label for crop button | Crop | | reset | Label for reset button | Reset | | hideMoreImages | Label for hide more images hyperlink | Hide more images | | showMoreImages | Label for show more images hyperlink | Show more images | | addImages | Label for toggle button to show images | Add images | | participantsDescription | Description for participants tab | Add participants to the game. | | additionalFields | Heading text for toggle actions on participants | Additional fields | | addParticipant | Label for add participant button | Add participant | | participantNumber | Placeholder text when no participant is fulfilled | Participant number | | group | Label for group input | Group | | undecided | Label for undecided toggle switch | Undecided | | removeParticipant | Label for remove participant button | Remove participant | | related | Label for related accordion | Related | | rules | Label for rules accordion | Rules | | timeFormat | Time format for displaying dates. Widgets uses dayjs as a date dependency. | DD.MM.YYYY, HH:mm | | edit | Used as a tooltip on edit button. | Edit | | clone | Used as label on clone button. | Clone | | close | Label for close button | Close | | pageNo | Label for pagination | Page No | | save | Label for save button | Save | | resolvePredictions | Tooltip for resolve predictions button | Resolve predictions | | add | Label for tooltip add button. | Add | | delete | Label for delete button | Delete | | cloneGameTitle | Title on cloning modal | Clone Standing Game | | outcome | Label for outcome tab | Outcome | | dragToReorder | Tooltip for drag handle | Drag to reorder | | noItemsToDisplay | Paragraph when no items are available in outcome | No items to display | | provideIdGameErrorMessage | Toast error message when no ID is provided when cloning a game | You need to provide an ID to your game! | | provideTitleGameErrorMessage | Toast error message when no title is provided when cloning a game | You need to provide a title to your game! | | gamesErrorMessage | Toast error message when request for fetching games fails | There was a problem retrieving information about the games. | | createGameMessage | When creating a game displaying a toast successful message for created game. | You have successfully created a game. | | editGameMessage | When editing a game displaying a toast successful message for edited game. | You have successfully edited a game. | | createGameErrorMessage | When creating a game displaying a toast error message. | There was a problem with creating the game. Please try again. | | editGameErrorMessage | When editing a game displaying a toast error message. | There was a problem with editing the game. Please try again. | | requiredFieldValidationMessage | Common error toast validation message when main required field is missing. | The following field is required: | | participantsValidationMessage | Error toast validation message for participants. participantNumber and propertyLabel are variables provided from the widget. The propertyLabel can be labels set for id and name. | Participant participantNumber: propertyLabel is required! | | relatedEntitiesErrorMessage | Error toast message when request to fetch entities for related fails| There was a problem with fetching entities for related. Please try again. | | predictionsStartingToResolveInfoMessage | Info toast message for resolving predictions per game. gameTitle is a variable provided from the widget. | Predictions for game gameTitle are starting to resolve. Keep in mind that this operation can take a while if there are thousands of predictions. | | resolvingPredictionsInProgressInfoMessage | Info toast message for resolving predictions in progress per game| Resolving game predictions is already in progress... | | resolvingPredictionsMessage | Success toast message for resolving predictions per game. gameTitle is a variable provided from the widget. predictionsLength is a number that comes from API response. | Predictions for game gameTitle are successfully resolved! Total resolved predictions: predictionsLength | | branding | Label for branding accordion | Branding | | colors | Label for colors tab in branding accordion | Colors | | primaryColor | Label for primary color input in branding accordion | Primary color | | secondaryColor | Label for secondary color input in branding accordion | Secondary color | | contentColor | Label for content color input in branding accordion | Content color | | backgroundColor | Label for background color input in branding accordion | Background color | | borderColor | Label for border color input in branding accordion | Border color | | additionalColor | Label for additional color input in branding accordion | Additional color | | urls | Label for urls tab in branding accordion | URLs | | primaryUrl | Label for primary url input in branding accordion | Primary URL | | secondaryUrl | Label for secondary url input in branding accordion | Secondary URL | | privacyPolicyUrl | Label for privacy policy url input in branding accordion | Privacy policy URL | | termsAndConditionsUrl | Label for terms and conditions url input in branding accordion | Terms and conditions URL | | additionalUrl | Label for additional url input in branding accordion | Additional URL | | mainLogo | Label for main logo input in branding accordion | Main Logo | | mobileLogo | Label for mobile logo input in branding accordion | Mobile logo | | backgroundImage | Label for background image input in branding accordion | Background image | | mobileBackgroundImage | Label for mobile background image input in branding accordion | Mobile background image | | additionalImage | Label for additional image input in branding accordion | | brandingTemplateLabel | Label for branding menu selection | Select branding | | brandingTemplatePlaceholder | Placeholder for branding menu selection | Choose existing branding | | selectRules | Label for select rules dropdown | Select rules | | format | Label for format button in content editor | Format | | minify | Label for minify button in content editor | Minify | | invalidJsonFormat | Error message for invalid JSON format | Invalid JSON format | | cannotMinifyInvalidJson | Error message when trying to minify invalid JSON | Cannot minify invalid JSON | | language | Label for language select in configuration and filters | Language | | languageDescription | Description for language select in configuration | Select the language for your game. | | flags | Label for flags accordion and filter | Flags | | flagsPlaceholder | Placeholder for flags input | Type your flag and press Enter | | translateTo | Label for translate button. _language_ is replaced with the target language name. | Translate to language | | languagesModalTitle | Title for the languages management modal | Manage languages | | languagesModalDescription | Description for the languages management modal | Select the languages you want to translate this game into. | | languagesModalSave | Label for save button in languages modal | Save | | translationErrorMessage | Error toast message when translation fails | There was a problem with translating the game. Please try again. |

Changelog

1.4.0 - 2026-04-07

  • Added:
    • Multi-language support
    • Language and flags filter in the games list
    • Language column in the games table
    • Flags accordion in game management
    • Language select in the Configuration section
    • Language tabs and Manage Languages modal for creating and switching between translations
    • Translate button for applying Google Translate to title, description and participant names

1.3.0 - 2026-02-17

  • Added:
    • Dropdown in Rules for selecting predefined content from info pages

1.2.0 - 2026-01-08

  • Added:
    • Branding configuration in sidebar

1.1.1 - 2025-11-07

  • Changed:
    • Updated related entities to support only classic quiz and bonusPointsGame relationships (previous version supported all entities and relationships, but backend did not support it)
    • Upgraded internal consuming management components library version and updated component props
  • Fixed:
    • Fixed condition for list games visualization and no games found message
    • Cloned games are now created with PENDING status

1.1.2 - 2025-11-07

  • Changed:
    • Color of OPEN status chip is changed from neutral to primary

1.1.3 - 2025-12-10

  • Changed:
    • Resolve predictions button is now disabled until the game's predictions cutoff date/time has passed