Ring Race Club ry

Kerhon tulevat tapahtumat

  • Ei tapahtumia

  • 23.7.2026, 12:00

    Ajoharjoittelutorstai 23.7.2026

    Moottoripyörien ratapäivät/ajohajroittelutapahtuma. 4 nopeusryhmää.

    Lue lisää
  • 12.9.2026, 12:00

    Finnish Racing Championship 12.-13.9.2025

    Autojen Circuit Racing, Rata-ajon -SM osakilpailu KymiRingillä.

























    Tapahtuma



    Nimi






    Kuvaus






    <p>Autojen Circuit Racing, Rata-ajon -SM osakilpailu KymiRingillä.<br>Ring Race Club järjestää FRC kilpailun ensimmäistä kertaa KymiRingillä</p>

    Normaali MuotoilutNormaaliOtsikko 1Otsikko 2Otsikko 3Otsikko 4KoodiTasaaTasaa vasemmalleKeskitäTasaa oikealleTasaaLihavointiKursivointiAlleviivausJärjestetty listaOletusarvoAlempi alfaAlempi kreikkaAlempi roomalainenYlempi alfaYlempi roomalainenJärjestämätön listaOletusarvoYmpyräLevyNeliö-Insert SnippetLisää taulukkoLisää linkkiLisää kuvaLisää vaakasuora viivaKoodi näkymäAutojen Circuit Racing, Rata-ajon -SM osakilpailu KymiRingillä.Ring Race Club järjestää FRC kilpailun ensimmäistä kertaa KymiRingillä


    <div
    class="modal fade component-backend-modal"
    role="dialog"
    aria-modal="true"
    v-if="visible"
    v-bind:aria-labelledby="ariaLabeledBy"
    :style="containerStyle"
    :class="containerCssClass"
    @click="onOverlayClick"
    >
    <div
    ref="document"
    role="document"
    class="modal-dialog"
    :class="cssClass"
    >
    <div
    ref="content"
    class="modal-content"
    :class="contentCssClassName"
    :style="modalStyle"
    @mousedown="onMouseDown"
    @transitionend="onTransitionEnd"
    >
    <slot name="content"></slot>

    <template v-if="resizable">
    <div v-if="resizable === true || resizable === 'vertical'" class="resize-handle" data-side="bt"></div>
    <div v-if="resizable === true || resizable === 'vertical'" class="resize-handle" data-side="tp"></div>
    <div v-if="resizable === true || resizable === 'horizontal'" class="resize-handle" data-side="lf"></div>
    <div v-if="resizable === true || resizable === 'horizontal'" class="resize-handle" data-side="rt"></div>
    <div v-if="resizable === true" class="resize-handle" data-side="bt-rt"></div>
    <div v-if="resizable === true" class="resize-handle" data-side="bt-lf"></div>
    <div v-if="resizable === true" class="resize-handle" data-side="tp-rt"></div>
    <div v-if="resizable === true" class="resize-handle" data-side="tp-lf"></div>
    </template>
    </div>
    </div>
    </div>


    <div
    data-default-button-text="OK"
    >
    <backend-component-modal
    ref="modal"
    :aria-labeled-by="modalTitleId"
    :unique-key="uniqueKey"
    :size="size"
    :storePosition="false"
    @hidden="onHidden"
    >
    <template v-slot:content>
    <div class="modal-header">
    <h4 class="modal-title" v-bind:id="modalTitleId" v-text="title"></h4>
    <button
    @click.prevent="$refs.modal.hide()"
    type="button"
    class="btn-close"
    aria-label="Sulje"
    tabindex="0"
    ></button>
    </div>
    <div class="modal-body">
    <p v-text="text"></p>
    </div>
    <div class="modal-footer">
    <button
    type="button"
    class="btn btn-primary btn-default-action"
    data-default-focus
    @click="$refs.modal.hide()"
    v-text="primaryButtonText"
    ></button>
    </div>
    </template>
    </backend-component-modal>
    </div>


    <div
    data-default-button-text="OK"
    >
    <backend-component-modal
    ref="modal"
    :aria-labeled-by="modalTitleId"
    :unique-key="uniqueKey"
    :size="size"
    :storePosition="false"
    @hidden="onHidden"
    >
    <template v-slot:content>
    <div class="modal-header">
    <h4 class="modal-title" v-bind:id="modalTitleId" v-text="title"></h4>
    <button
    @click.prevent="$refs.modal.hide()"
    type="button"
    class="btn-close"
    aria-label="Sulje"
    tabindex="0"
    ></button>
    </div>
    <div class="modal-body">
    <p v-text="text"></p>
    </div>
    <div class="modal-footer">
    <button
    type="button"
    class="btn btn-primary btn-default-action"
    :class="{'btn-primary': !isDanger, 'btn-danger': isDanger}"
    v-bind:data-default-focus="!isDanger"
    @click="onButtonClick"
    v-text="primaryButtonText"
    ></button>
    <span class="button-separator">tai</span>
    <button
    class="btn btn-link text-muted"
    @click.prevent="$refs.modal.hide()"
    v-bind:data-default-focus="isDanger"
    >Peruuta</button>
    </div>
    </template>
    </backend-component-modal>
    </div>


    <div>
    <backend-component-modal
    ref="modal"
    :aria-labeled-by="modalTitleId"
    :unique-key="uniqueKey"
    :size="size"
    :storePosition="false"
    @hidden="onHidden"
    >
    <template v-slot:content>
    <div class="modal-header">
    <h4 class="modal-title" v-bind:id="modalTitleId" v-text="title"></h4>
    <button
    @click.prevent="$refs.modal.hide()"
    type="button"
    class="btn-close"
    aria-label="Sulje"
    tabindex="0"
    ></button>
    </div>
    <div v-html="text" @click="onClick"></div>
    </template>
    </backend-component-modal>
    </div>


    <div
    class="component-backend-richeditor-document-connector flex-layout-column layout-absolute"
    :class="cssClass"
    data-configuration="{"lang":{"command_upload_from_computer":"Siirr\u00e4 tietokoneelta","browse":"Selaa mediakirjastoa","by_url":"URL-osoitteen mukaan","url_required":"URL-osoite on pakollinen","url_validation":"URL-osoitteen on alettava http:\/\/ tai https:\/\/","add_image_title":"Lis\u00e4\u00e4 kuva","add_video_title":"Lis\u00e4\u00e4 video","add_audio_title":"Lis\u00e4\u00e4 audio","add_file_title":"Lis\u00e4\u00e4 tiedosto","embedding_code":"Liitet\u00e4\u00e4n koodia","embedding_code_required":"Upotuskoodi on pakollinen","invalid_embedding_code_title":"Virheellinen koodi","invalid_embedding_code_message":"Liit\u00e4 kelvollinen HTML-upotuskoodi"},"vendorPath":"https:\/\/www.ringraceclub.fi\/modules\/backend\/vuecomponents\/richeditordocumentconnector\/assets\/vendor"}"
    >
    <div v-if="allowResizing && !codeEditingMode" class="top-ruler flex-layout-item fix">
    <div class="width-indicator" :style="rulerStyle">
    <span v-for="tick in majorTicks" :style="tick.style" class="width-tick tick-major"></span>
    <span v-for="tick in minorTicks" :style="tick.style" class="width-tick tick-minor"></span>

    <div class="width-drag-handle" @mousedown.stop="onResizingHandleMouseDown" ref="handle"></div>
    </div>
    </div>
    <div class="flex-layout-item stretch richeditor-container">
    <slot></slot>
    </div>
    <div class="flex-layout-item stretch relative codeeditor-container">
    <backend-component-monacoeditor
    v-if="codeEditingMode"
    ref="codeEditor"
    container-css-class="fill-container"
    :model-definitions="codeEditorModelDefinitions"
    >
    </backend-component-monacoeditor>
    </div>
    </div>



    <backend-component-document
    container-css-class="fill-container"
    :built-in-mode="true"
    :full-screen="fullScreen"
    ref="document"
    >
    <template v-slot:toolbar v-if="!hasExternalToolbar">
    <backend-component-document-toolbar
    :elements="toolbarElements"
    :disabled="readOnly"
    @command="onToolbarCommand"
    ref="toolbar"
    ></backend-component-document-toolbar>
    </template>

    <template v-slot:content>
    <div class="flex-layout-column fill-container" ref="contentContainer">
    <div class="flex-layout-item stretch editor-panel relative">
    <backend-component-richeditor-document-connector
    :allow-resizing="showMargins"
    :toolbar-container="toolbarExtensionPointProxy"
    :external-toolbar-app-state="externalToolbarAppState"
    :use-media-manager="useMediaManager"
    :built-in-mode="true"
    unique-key="html-editor-form-widget"
    container-css-class="fill-container"
    >
    <backend-component-richeditor
    v-model="value"
    :read-only="options.readOnly"
    :use-line-breaks="options.useLineBreaks"
    :full-page="fullPage"
    :editor-options="editorOptions"
    :toolbar-buttons="toolbarButtons"
    ref="richeditor"
    @blur="onBlur"
    @focus="onFocus"
    >
    </backend-component-richeditor>
    </backend-component-richeditor-document-connector>
    </div>
    </div>
    </template>
    </backend-component-document>



    <div
    class="component-backend-document flex-layout-column"
    :class="cssClass"
    >
    <transition name="document-fade-in">
    <template v-if="!loading && !errorLoadingDocument">
    <transition name="document-header-fade">
    <div class="document-header-container flex-layout-item fix" v-show="!headerCollapsed">
    <slot name="header"></slot>
    </div>
    </transition>
    </template>
    </transition>

    <transition name="document-fade-in">
    <div v-if="!loading && !errorLoadingDocument" class="document-toolbar-container flex-layout-item fix">
    <slot name="toolbar"></slot>
    </div>
    </transition>

    <div v-if="!loading && !errorLoadingDocument" class="flex-layout-item fix">
    <slot name="drawer"></slot>
    </div>

    <transition name="document-fade-in">
    <div v-if="!loading && !errorLoadingDocument" class="document-content-container flex-layout-item stretch relative">
    <slot name="content"></slot>

    <transition name="processing-fade-in">
    <backend-component-loading-indicator
    v-if="processing"
    indicator-style="stripe"
    css-class="document-progress-indicator"
    ></backend-component-loading-indicator>
    </transition>
    </div>
    </transition>

    <div v-if="loading" class="flex-layout-item justify-center">
    <backend-component-loading-indicator
    size="small"
    ></backend-component-loading-indicator>
    </div>

    <transition name="processing-fade-in">
    <div v-if="errorLoadingDocument" class="flex-layout-item justify-center">
    <div class="document-loading-error backend-icon-background-pseudo">
    <h3 v-text="errorLoadingDocumentHeader"></h3>
    <p v-text="errorLoadingDocument"></p>
    </div>
    </div>
    </transition>
    </div>



    <div class="flex-layout-row document-toolbar-scroll-container" ref="toolbarContainer">
    <div class="document-toolbar-scrollable flex-layout-item stretch" ref="scrollable">
    <template v-for="element in scrollableElements" v-if="!element.hidden">
    <div
    class="document-toolbar-element"
    :class="['element-type-'+element.type, {'button-group': !!element.buttonGroup, 'button-icon-only': element.type == 'button' && !element.label}]">
    <backend-component-document-toolbar-button
    v-if="element.type == 'button' || element.type == 'dropdown'"
    :settings=element
    :toolbar-disabled="disabled"
    @dropdowncontentshown="onDropdownContentShown"
    @dropdowncontenthidden="onDropdownContentHidden"
    @command="onElementCommand"
    ></backend-component-document-toolbar-button>
    </div> </template>
    </div>

    <div class="flex-layout-item fix fixed-right">
    <template v-for="element in fixedRightElements" v-if="!element.hidden">
    <div
    class="document-toolbar-element"
    :class="['element-type-'+element.type, {'button-group': !!element.buttonGroup, 'button-icon-only': element.type == 'button' && !element.label}]">
    <backend-component-document-toolbar-button
    v-if="element.type == 'button' || element.type == 'dropdown'"
    :settings=element
    :toolbar-disabled="disabled"
    @dropdowncontentshown="onDropdownContentShown"
    @dropdowncontenthidden="onDropdownContentHidden"
    @command="onElementCommand"
    ></backend-component-document-toolbar-button>
    </div> </template>
    </div>
    </div>


    <div v-oc-hotkey:[settings.hotkey]="onHotkey" v-if="!settings.hidden">
    <a
    role="button"
    v-if="settings.href"
    v-bind:href="settings.href"
    v-bind:target="settings.target ? settings.target : '_self'"
    v-bind:disabled="settings.disabled || toolbarDisabled"
    v-bind:tabindex="settings.disabled || toolbarDisabled ? -1 : 0"
    v-bind:aria-controls="ariaControlsId"
    v-bind:aria-haspopup="settings.type == 'dropdown'"
    v-bind:id="buttonId"
    v-bind:data-cmd="command"
    v-bind:data-tooltip-text="tooltip"
    v-bind:data-tooltip-hotkey="tooltipHotkey"
    class="backend-toolbar-button"
    :class="cssClass"
    @click="onClick"
    ref="button"
    >
    <i v-if="icon" :class="icon"></i>
    <span v-if="label" v-text="label"></span>
    </a>
    <button
    type="button"
    v-else
    v-bind:disabled="settings.disabled || toolbarDisabled"
    v-bind:tabindex="settings.disabled || toolbarDisabled ? -1 : 0"
    v-bind:aria-controls="ariaControlsId"
    v-bind:aria-haspopup="settings.type == 'dropdown'"
    v-bind:id="buttonId"
    v-bind:data-cmd="command"
    v-bind:data-tooltip-text="tooltip"
    v-bind:data-tooltip-hotkey="tooltipHotkey"
    class="backend-toolbar-button"
    :class="cssClass"
    @click="onClick"
    ref="button"
    >
    <i v-if="icon" :class="icon"></i>
    <span class="button-label" v-if="label" v-text="label" :style="titleStyle"></span>
    </button
    ><button
    type="button"
    v-if="settings.type != 'dropdown' && settings.menuitems"
    class="backend-toolbar-button menu-trigger"
    :class="menuTriggerCssClass"
    aria-haspopup="true"
    v-bind:disabled="settings.disabled || toolbarDisabled"
    v-bind:tabindex="settings.disabled || toolbarDisabled ? -1 : 0"
    v-bind:id="menuButtonId"
    v-bind:aria-controls="menuId"
    @click="onClick($event, false, true)"
    ref="menuButton"
    >
    <span v-if="settings.showBadge" class="badge"></span>
    </button>

    <backend-component-dropdownmenu
    v-if="settings.menuitems"
    :items=settings.menuitems
    :menu-id="menuId"
    :labeled-by-id="buttonId"
    ref="menu"
    @closedwithesc="onMenuClosedWithEsc"
    @command="onMenuItemCommand"
    @shown="onMenuShown"
    @hidden="onMenuHidden"
    @aligntotrigger="onAlignToTrigger"
    ></backend-component-dropdownmenu>
    </div>



    <div class="document-header" :class="{'has-document-icon': documentIcon, 'has-close-icon': showCloseIcon}">
    <span
    v-if="documentIcon"
    class="document-icon"
    v-bind:style="documentIconStyle"
    >
    <i :class="documentIcon.cssClass"></i>
    </span>

    <input type="text" ref="titleInput" class="header-title" v-model="data[titleProperty]" v-bind:disabled="disabled || disableTitleEditor" @input="onTitleInput"></input>

    <div class="flex-layout-row" v-if="subtitleProperty" v-show="!hideSubtitleEditor">
    <div class="flex-layout-item fix subtitle-label center" v-text="subtitleLabel + ':'"></div>
    <input
    type="text"
    class="header-subtitle flex-layout-item stretch"
    v-model="data[subtitleProperty]"
    v-bind:disabled="disabled"
    @input="onSubtitleInput"
    ></input>
    </div>

    <button
    v-if="showCloseIcon"
    class="close close-icon backend-icon-background-pseudo"
    @click="$emit('documentcloseclick')"
    >
    <span aria-hidden="true">×</span>
    </button>
    </div>


    <div>
    <transition name="backend-dropdown-overlay-touch-screen">
    <div v-if="visible" class="backend-dropdownmenu-overlay" @click.prevent="onOverlayClick" @contextmenu.prevent="onOverlayContextMenu"></div>
    </transition>

    <backend-component-dropdownmenu-sheet
    ref="sheet"
    :items="items"
    :labeled-by-id="labeledById"
    :menu-id="menuId"
    :preferable-position="preferablePosition"
    @aligntotrigger="$emit('aligntotrigger', $event)"
    @command="$emit('command', $event)"
    @hidden="onSheetHidden"
    @closemenu="hideMenu"
    ></backend-component-dropdownmenu-sheet>
    </div>


    <div class="dropdown-menu backend-dropdownmenu" data-menu-position-container>
    <div class="dropdown-container">
    <transition name="backend-dropdown-menu-touch-screen" v-on:after-leave="onAfterLeave">
    <ul
    role="menu"
    :class="menuClassName"
    ref="menu"
    v-if="visible"
    v-bind:id="menuId"
    v-bind:aria-labelledby="labeledById"
    >
    <li class="submenu-header clearfix" v-if="isSubmenu">
    <button
    class="go-back-link backend-icon-background-pseudo"
    @click.stop.prevent="onGoBackClick"
    >Takaisin</button>
    <button
    class="close-link backend-icon-background-pseudo"
    @click.stop.prevent="onCloseClick"
    >Sulje valittko</button>
    </li>

    <backend-component-dropdownmenu-menuitem
    v-for="(item, index) in items"
    :type="item.type"
    :disabled="item.disabled"
    :href="item.href"
    :target="item.target"
    :checked="item.checked"
    :items="item.items"
    :icon="item.icon"
    :label="item.label"
    :command="item.command"
    :itemStyle="item.style"
    :key="index"
    :is-first="index == 0"
    @command="onCommand($event)"
    @hide="onHide"
    @itemmouseenter="onItemMouseEnter"
    @submenushown="onItemSubmenuShown"
    @submenuhidden="onItemSubmenuHidden"
    @closemenu="$emit('closemenu', $event)"
    ></backend-component-dropdownmenu-menuitem>
    </ul>
    </transition>
    </div>
    </div>


    <li
    class="item"
    :class="{
    separator: type == 'separator',
    first: isFirst,
    'submenu-expanded': isSubmenuExpanded
    }"
    v-bind:role="type == 'separator' ? 'separator' : 'presentation'"
    v-bind:disabled="disabled"
    >
    <button v-if="!href && type != 'separator'"
    ref="itemElement"
    v-bind:tabindex="disabled ? -1 : 0"
    v-bind:disabled="disabled"
    v-bind:aria-disabled="disabled"
    v-bind:role="itemRole"
    v-bind:aria-checked="itemIsChecked ? 'true' : 'false'"
    v-bind:id="menuItemId"
    v-bind:aria-haspopup="hasSubmenu"
    v-bind:aria-expanded="isSubmenuExpanded"
    :class="{'has-submenu': hasSubmenu}"
    :style="itemStyle"
    @click="onClick($event)"
    @mouseenter="onMouseEnter"
    data-menuitem
    >
    <i :class="icon" v-if="icon"></i>
    <i
    class="backend-icon-background-pseudo"
    v-if="type == 'checkbox' || type == 'radiobutton'"
    ></i>
    <i
    class="backend-icon-background-pseudo submenu-indicator"
    v-if="hasSubmenu"
    ></i>
    <span v-text="label"></span>
    </button>

    <a
    ref="itemElement"
    v-if="href && type != 'separator'"
    v-bind:href="href"
    v-bind:target="target ? target : '_self'"
    v-bind:tabindex="disabled ? -1 : 0"
    v-bind:disabled="disabled"
    v-bind:aria-disabled="disabled"
    v-bind:aria-checked="itemIsChecked ? 'true' : 'false'"
    v-bind:role="itemRole"
    :style="itemStyle"
    @click="onClick($event)"
    @mouseenter="onMouseEnter"
    data-menuitem
    >
    <i :class="icon" v-if="icon"></i>
    <i
    class="backend-icon-background-pseudo"
    v-if="type == 'checkbox' || type == 'radiobutton'"
    ></i>
    <span v-text="label"></span>
    </a>

    <backend-component-dropdownmenu-sheet
    v-if="hasSubmenu"
    ref="submenu"
    :items="items"
    :labeled-by-id="menuItemId"
    :menu-id="submenuId"
    :is-submenu="true"
    @command="$emit('command', $event)"
    @hidden="onSubmenuHidden"
    @closemenu="$emit('closemenu', $event)"
    ></backend-component-dropdownmenu-sheet>
    </li>


    <div class="component-backend-loading-indicator" :class="className">
    <div class="spinner" v-if="indicatorStyle == 'circles'">
    <div class="bounce1"></div>
    <div class="bounce2"></div>
    <div class="bounce3"></div>
    </div>

    <div v-if="indicatorStyle == 'stripe'">
    <div class="stripe-indicator">
    <div></div>
    </div>
    </div>

    <div v-if="indicatorStyle == 'bar'" class="bar-indicator">
    <div class="stripe-indicator">
    <div :style="barIndicatorStyle" :class="{'progress-done': this.progress == 100}"></div>
    </div>
    </div>
    </div>


    <div
    class="component-backend-richeditor flex-layout-column"
    :class="cssClass"
    data-configuration="{"editorLang":"fi","useMediaManager":true,"iframeStylesFile":"https:\/\/www.ringraceclub.fi\/modules\/backend\/vuecomponents\/richeditor\/assets\/css\/iframestyles.css","globalToolbarButtons":null,"allowEmptyTags":null,"allowTags":null,"allowAttrs":null,"noWrapTags":null,"removeTags":null,"lineBreakerTags":null,"imageStyles":null,"linkStyles":null,"paragraphFormat":null,"paragraphStyles":null,"inlineStyles":null,"tableStyles":null,"tableCellStyles":null}"
    >
    <div class="flex-layout-item field-richeditor stretch relative" data-richeditor-vue>
    <textarea ref="textarea" v-bind:id="editorId" class="editor-element"></textarea>
    </div>
    </div>



    <div
    class="component-backend-uploader"
    v-show="!hidden"
    :class="{'uploader-collapsed': collapsed}"
    data-lang-uploading="Siirretään tiedostoja"
    data-lang-complete="Siirto valmis"
    >
    <div class="uploader-header">
    <h3 v-text="titleText"></h3>

    <backend-component-loading-indicator
    indicator-style="bar"
    :progress="totalProgress"
    ></backend-component-loading-indicator>

    <button
    @click.prevent="onHeaderButtonClick"
    type="button"
    class="close backend-icon-background-pseudo"
    :class="{'collapse': !collapsed && hasFilesInProgress, 'expand': collapsed && hasFilesInProgress}"
    tabindex="0"
    ><span aria-hidden="true">×</span>
    </button>
    </div>
    <div class="uploader-body-container">
    <div class="uploader-body">
    <backend-component-scrollable-panel
    :relative-layout="true"
    :relative-layout-max-height="200"
    >
    <div>
    <ul>
    <backend-component-uploader-item
    v-for="(file, index) in files"
    :key="file.key"
    :fileName="file.name"
    :status="file.status"
    :progress="file.progress"
    :errorMessage="file.errorMessage"
    @removeclick="onRemoveClick(index)"
    ></backend-component-uploader-item>
    </ul>
    </div>
    </backend-component-scrollable-panel>
    </div>
    </div>

    </div>


    <li :class="cssClass">
    <span class="item-name" v-text="fileName"></span>
    <span class="item-error" v-if="errorMessage" v-text="errorMessage"></span>

    <i
    class="backend-icon-background"
    v-if="status == 'completed'"
    ></i>

    <template
    v-if="status == 'uploading'"
    >
    <backend-component-loading-indicator
    indicator-style="bar"
    :progress="progress"
    ></backend-component-loading-indicator>

    <button
    @click.prevent="$emit('removeclick')"
    type="button"
    class="close backend-icon-background-pseudo"
    tabindex="0"
    ><span aria-hidden="true">×</span>
    </button>
    </template>
    </li>


    <div
    class="component-backend-scrollablepanel"
    :class="{'scrollablepanel-relative': relativeLayout}"
    >
    <div class="scrollable-panel-container" ref="container">
    <div
    class="scrollable"
    ref="scrollable"
    v-on:scroll.passive="onScroll"
    :style="containerStyle"
    >
    <slot></slot>
    </div>
    </div>
    </div>


    <backend-component-inspector-panel
    ref="panel"
    :controls="dataSchema"
    :obj="liveObject"
    :parent-obj="parentObject"
    :inspector-unique-id="uniqueId"
    :layout-update-data="layoutUpdateData"
    :inspector-preferences="inspectorPreferences"
    >
    </backend-component-inspector-panel>


    <div
    class="component-backend-inspector-panel"
    data-validation-alert-title="Virhe"
    >
    <backend-component-inspector-grouphost
    :controls="untabbedControls"
    :obj="obj"
    :parent-obj="parentObj"
    :splitter-data="splitterData"
    :inspector-unique-id="inspectorUniqueId"
    :depth="0"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-preferences="inspectorPreferences"
    ></backend-component-inspector-grouphost>

    <backend-component-tabs
    v-show="tabs.length > 0"
    ref="tabs"
    :tabs="tabs"
    :closeable="false"
    :use-slots="true"
    tabs-style="inspector"
    @tabselected="onTabSelected"
    >
    <template v-for="tabInfo in tabs" v-slot:[tabInfo.key]>
    <backend-component-inspector-grouphost
    :controls="tabbedControls[tabInfo.key]"
    :obj="obj"
    :parent-obj="parentObj"
    :splitter-data="splitterData"
    :inspector-unique-id="inspectorUniqueId"
    :depth="0"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-preferences="inspectorPreferences"
    ></backend-component-inspector-grouphost>
    </template>
    </backend-component-tabs>
    </div>


    <div class="component-backend-inspector-group">
    <div
    class="group-name inspector-padding-control-left inspector-padding-control-right"
    :class="{expanded: expanded, collapsed: !expanded, loading: loading, 'has-errors': hasErrors, 'hide-bottom-border-collapsed': hideBottomBorder}"
    @click.stop="onToggleGroup"
    >
    <div :style="nameStyle">
    <span
    v-text="nameAndValue"
    class="backend-icon-background-pseudo"
    ></span>

    <backend-component-loading-indicator v-if="loading"
    size="tiny"
    ></backend-component-loading-indicator>
    </div>
    </div>
    <transition name="group-fade-in">
    <backend-component-inspector-controlhost
    v-show="expanded"
    :controls="controls"
    :obj="obj"
    :parent-obj="parentObj"
    :splitter-data="splitterData"
    :depth="depth + 1"
    :panel-update-data="panelUpdateData"
    :inspector-preferences="inspectorPreferences"
    :inspector-unique-id="inspectorUniqueId"
    @inspectorcommand="$emit('inspectorcommand', $event)"
    >
    </backend-component-inspector-controlhost>
    </transition>
    </div>


    <div class="component-backend-inspector-grouphost">
    <backend-component-inspector-controlhost
    :controls="groupedControls.ungrouped"
    :obj="obj"
    :parent-obj="parentObj"
    :splitter-data="splitterData"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-unique-id="inspectorUniqueId"
    :inspector-preferences="inspectorPreferences"
    >
    </backend-component-inspector-controlhost>

    <backend-component-inspector-group
    v-for="(controls, groupName) in groupedControls"
    v-if="groupName != 'ungrouped'"
    :key="groupName"
    :group-name="groupName"
    :obj="obj"
    :parent-obj="parentObj"
    :controls="controls"
    :splitter-data="splitterData"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-unique-id="inspectorUniqueId"
    :inspector-preferences="inspectorPreferences"
    >
    </backend-component-inspector-group>
    </div>


    <table class="component-backend-inspector-controlhost" @mousedown.stop="onHandleMouseDown">
    <backend-component-inspector-controlhost-row
    v-for="control in controls"
    :obj="obj"
    :parent-obj="parentObj"
    :key="control.property"
    :control-host-unique-id="uniqueId"
    :control="control"
    :splitter-data="splitterData"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-preferences="inspectorPreferences"
    :inspector-unique-id="inspectorUniqueId"
    :is-full-width="isFullWidthControl(control)"
    @inspectorcommand="$emit('inspectorcommand', $event)"
    >
    </backend-component-inspector-controlhost-row>
    </table>


    <tr class="inspector-control-row" :class="{'has-errors': hasErrors, 'hide-bottom-border': bottomBorderHidden}" v-show="rowVisible">
    <th v-if="!isFullWidth && !controlLabelHidden" :style="titlePanelStyle">
    <div class="inspector-label-container" :class="{'has-description': control.description}">
    <label
    class="inspector-padding-control-left"
    v-text="control.title"
    v-bind:for="controlEditorId"
    :style="labelStyle"
    @click.stop="onLabelClick"
    ></label>
    <span
    v-if="control.description"
    class="property-description backend-icon-background-pseudo"
    v-bind:data-tooltip-text="control.description"
    ></span>
    </div>
    </th>

    <td v-bind:colspan="controlColspan">
    <div class="full-width-control-label" v-if="isFullWidth && (control.title || control.description) && ! controlLabelHidden">
    <label
    class="inspector-padding-control-left"
    v-text="control.title"
    v-bind:for="controlEditorId"
    :style="labelStyle"
    @click.stop="onLabelClick"
    ></label>
    <div
    v-if="control.description"
    class="inspector-padding-control-left full-width-property-description"
    v-text="control.description"
    :style="labelStyle"
    ></div>
    </div>

    <div :class="{'inspector-control-container': !isFullWidth, 'no-property-title': !control.title && !control.description}">
    <div v-if="!isFullWidth" class="inspector-drag-handle"></div>

    <backend-component-inspector-control-text
    v-if="control.type == 'string' || control.type == 'text'"
    :obj="obj"
    :parent-obj="parentObj"
    :control="control"
    :control-id="controlEditorId"
    :splitter-data="splitterData"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-preferences="inspectorPreferences"
    ref="editor"
    @focus="onEditorFocus"
    @blur="onEditorBlur"
    @invalid="onEditorInvalid"
    @valid="onEditorValid"
    ></backend-component-inspector-control-text>

    <backend-component-inspector-control-dropdown
    v-if="control.type == 'dropdown'"
    :obj="obj"
    :parent-obj="parentObj"
    :control="control"
    :control-id="controlEditorId"
    :inspector-preferences="inspectorPreferences"
    ref="editor"
    @focus="onEditorFocus"
    @blur="onEditorBlur"
    @invalid="onEditorInvalid"
    @valid="onEditorValid"
    ></backend-component-inspector-control-dropdown>

    <backend-component-inspector-control-autocomplete
    v-if="control.type == 'autocomplete'"
    :obj="obj"
    :control="control"
    :control-id="controlEditorId"
    :inspector-preferences="inspectorPreferences"
    ref="editor"
    @focus="onEditorFocus"
    @blur="onEditorBlur"
    @invalid="onEditorInvalid"
    @valid="onEditorValid"
    ></backend-component-inspector-control-autocomplete>

    <backend-component-inspector-control-checkbox
    v-if="control.type == 'checkbox'"
    :obj="obj"
    :control="control"
    :control-id="controlEditorId"
    :inspector-preferences="inspectorPreferences"
    ref="editor"
    @focus="onEditorFocus"
    @blur="onEditorBlur"
    @invalid="onEditorInvalid"
    @valid="onEditorValid"
    ></backend-component-inspector-control-checkbox>

    <backend-component-inspector-control-table
    v-if="control.type == 'table'"
    :obj="obj"
    :parent-obj="parentObj"
    :control="control"
    :control-id="controlEditorId"
    :inspector-preferences="inspectorPreferences"
    ref="editor"
    @hidebottomborder="bottomBorderHidden = true"
    @hidefullwidthlabel="controlLabelHidden = true"
    ></backend-component-inspector-control-table>

    <backend-component-inspector-control-object
    v-if="control.type == 'object'"
    :obj="obj"
    :parent-obj="parentObj"
    :control="control"
    :control-id="controlEditorId"
    :inspector-preferences="inspectorPreferences"
    :splitter-data="splitterData"
    :inspector-unique-id="inspectorUniqueId"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    ref="editor"
    @hidefullwidthlabel="controlLabelHidden = true"
    @hidebottomborder="bottomBorderHidden = true"
    ></backend-component-inspector-control-object>

    <backend-component-inspector-control-set
    v-if="control.type == 'set'"
    :obj="obj"
    :parent-obj="parentObj"
    :control="control"
    :control-id="controlEditorId"
    :inspector-preferences="inspectorPreferences"
    :splitter-data="splitterData"
    :inspector-unique-id="inspectorUniqueId"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    ref="editor"
    @hidefullwidthlabel="controlLabelHidden = true"
    @hidebottomborder="bottomBorderHidden = true"
    ></backend-component-inspector-control-set>

    <backend-component-inspector-control-objectlist
    v-if="control.type == 'objectList'"
    :obj="obj"
    :parent-obj="parentObj"
    :control="control"
    :control-id="controlEditorId"
    :inspector-preferences="inspectorPreferences"
    :splitter-data="splitterData"
    :inspector-unique-id="inspectorUniqueId"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    ref="editor"
    @hidefullwidthlabel="controlLabelHidden = true"
    @hidebottomborder="bottomBorderHidden = true"
    ></backend-component-inspector-control-objectlist>

    <backend-component-inspector-control-objectlist-records
    v-if="control.type == 'objectListRecords'"
    :obj="obj"
    :parent-obj="parentObj"
    :control="control"
    :control-id="controlEditorId"
    :inspector-preferences="inspectorPreferences"
    :splitter-data="splitterData"
    :inspector-unique-id="inspectorUniqueId"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    ref="editor"
    @hidefullwidthlabel="controlLabelHidden = true"
    @hidebottomborder="bottomBorderHidden = true"
    @inspectorcommand="$emit('inspectorcommand', $event)"
    ></backend-component-inspector-control-objectlist-records>

    <backend-component-inspector-control-dictionary
    v-if="control.type == 'dictionary'"
    :obj="obj"
    :parent-obj="parentObj"
    :control="control"
    :control-id="controlEditorId"
    :inspector-preferences="inspectorPreferences"
    :splitter-data="splitterData"
    :inspector-unique-id="inspectorUniqueId"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    ref="editor"
    @hidefullwidthlabel="controlLabelHidden = true"
    @hidebottomborder="bottomBorderHidden = true"
    ></backend-component-inspector-control-dictionary>

    <backend-component-inspector-control-mediafinder
    v-if="control.type == 'mediafinder'"
    :obj="obj"
    :parent-obj="parentObj"
    :control="control"
    :control-id="controlEditorId"
    :splitter-data="splitterData"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-preferences="inspectorPreferences"
    ref="editor"
    @focus="onEditorFocus"
    @blur="onEditorBlur"
    @invalid="onEditorInvalid"
    @valid="onEditorValid"
    ></backend-component-inspector-control-mediafinder> </div>
    </td>
    </tr>


    <div>
    <input
    v-if="control.type == 'string'"
    class="inspector-control"
    type="text"
    ref="input"
    v-bind:value="valueWithPreset"
    v-bind:id="controlId"
    v-bind:placeholder="control.placeholder"
    v-bind:readonly="inspectorPreferences.readOnly"
    @input="updateValue"
    @focus="$emit('focus', $event)"
    @blur="$emit('blur', $event)"
    />

    <textarea
    v-if="control.type == 'text'"
    class="component-backend-inspector-textinput inspector-control"
    :class="cssClass"
    ref="input"
    v-bind:value="valueWithPreset"
    v-bind:id="controlId"
    v-bind:placeholder="control.placeholder"
    v-bind:readonly="inspectorPreferences.readOnly"
    @keydown.enter.stop
    @input="updateValue"
    @focus="$emit('focus', $event)"
    @blur="$emit('blur', $event)"
    ></textarea>

    <div
    v-if="control.type == 'text'"
    class="inspector-textarea-shadow inspector-control component-backend-inspector-textinput"
    ref="textareaShadow"
    v-text="valueWithPreset"
    ></div>
    </div>


    <div v-bind:tabindex="containerTabIndex" @focus="onContainerFocus">
    <backend-component-loading-indicator v-if="loadingDynamicOptions"
    size="tiny"
    ></backend-component-loading-indicator>

    <backend-component-dropdown
    v-if="!loadingDynamicOptions"
    :options="options"
    :id="controlId"
    :placeholder="control.placeholder"
    :tabindex="0"
    :disabled="inspectorPreferences.readOnly"
    :allow-empty="true"
    track-by="code"
    label="label"
    ref="input"
    v-model="selectedValue"
    select-label=""
    selected-label=""
    deselect-label=""
    @input="updateValue"
    @open="onFocus"
    @close="onBlur"
    @hook:mounted="onDropdownMounted"
    >
    <span slot="noResult">Vaihtoehtoja ei löytynyt</span>
    <template v-if="useValuesAsIcons || useValuesAsColors" slot="option" slot-scope="props">
    <div class="option-with-icon" v-if="useValuesAsIcons">
    <div class="option-icon" :class="props.option.code"></div>
    <span>{{ props.option.label }}</span>
    </div>

    <div class="option-with-color" v-if="useValuesAsColors">
    <div class="option-color" :style="{'background-color': props.option.code}"></div>
    <span>{{ props.option.label }}</span>
    </div>
    </template>
    </backend-component-dropdown>
    </div>


    <div class="inspector-control">
    <div
    class="component-backend-inspector-checkbox"
    >
    <label
    tabindex="0"
    @keydown="onLabelKeydown"
    @focus="$emit('focus', $event)"
    @blur="$emit('blur', $event)"
    >
    <input
    type="checkbox"
    ref="input"
    value="1"
    v-bind:checked="isChecked"
    v-bind:id="controlId"
    v-bind:readonly="inspectorPreferences.readOnly"
    v-bind:disabled="inspectorPreferences.readOnly"
    @input="updateValue"
    /><span class="backend-icon-background-pseudo"></span>
    </label>
    </div>
    </div>


    <div
    class="component-backend-inspector-table"
    data-lang-add-item="Lisää kohde"
    >
    <table>
    <backend-component-inspector-control-table-head
    :columns="columns"
    >
    </backend-component-inspector-control-table-head>
    <tbody>
    <backend-component-inspector-control-table-row
    v-for="(row, index) in value"
    :row="row"
    :key="index"
    :columns="columns"
    :row-index="index"
    :inspector-preferences="inspectorPreferences"
    :table-configuration="tableConfiguration"
    @removerow="onRemoveRowClick"
    >
    </backend-component-inspector-control-table-row>
    </tbody>
    </table>

    <div v-if="tableConfiguration.adding" class="inspector-padding-control-left table-control-links">
    <a
    href="#"
    class="add-item-link"
    :class="{disabled: inspectorPreferences.readOnly}"
    @click.stop.prevent="onAddItemClick"
    v-text="control.btnAddRowLabel === undefined ? lang.addItem : control.btnAddRowLabel"
    ></a>
    </div>
    </div>


    <thead @mousedown.stop="onHandleMouseDown">
    <tr>
    <backend-component-inspector-control-table-headcell
    v-for="(column, index) in columns"
    :key="index"
    :column="column"
    :column-index="index"
    :column-width="columnWidth"
    >
    </backend-component-inspector-control-table-headcell>
    </tr>
    </thead>


    <th v-bind:style="cellStyle">
    <div class="header-cell-container">
    <div v-if="columnIndex != 0" class="cell-resize-handle"></div>
    <span v-text="column.title"></span>
    </div>
    </th>


    <tr :class="{focused: focused, 'has-errors': hasErrors}">
    <backend-component-inspector-control-table-cell
    v-for="(column, index) in columns"
    :key="index"
    :column="column"
    :row="row"
    :cell-index="index"
    :inspector-preferences="inspectorPreferences"
    :table-configuration="tableConfiguration"
    :is-last-cell="index == columns.length-1"
    @focus="onCellFocus"
    @blur="onCellBlur"
    @valid="onValid"
    @invalid="onInvalid"
    @removerow="$emit('removerow', rowIndex)"
    >
    </backend-component-inspector-control-table-cell>
    </tr>


    <td>
    <div class="table-cell-container">
    <backend-component-inspector-control-table-text
    v-if="column.type == 'string'"
    :row="row"
    :column="column"
    :cell-index="cellIndex"
    :inspector-preferences="inspectorPreferences"
    ref="editor"
    @focus="$emit('focus', $event)"
    @blur="$emit('blur', $event)"
    @valid="$emit('valid', $event)"
    @invalid="$emit('invalid', $event)"
    >
    </backend-component-inspector-control-table-text>

    <backend-component-inspector-control-table-dropdown
    v-if="column.type == 'dropdown'"
    :row="row"
    :column="column"
    :cell-index="cellIndex"
    :inspector-preferences="inspectorPreferences"
    ref="editor"
    @focus="$emit('focus', $event)"
    @blur="$emit('blur', $event)"
    @valid="$emit('valid', $event)"
    @invalid="$emit('invalid', $event)"
    >
    </backend-component-inspector-control-table-dropdown>

    <button v-if="isLastCell && tableConfiguration.deleting && !inspectorPreferences.readOnly" @click.stop="$emit('removerow')" class="remove-row-btn"></button>
    </div>
    </td>


    <input
    type="text"
    class="inspector-table-control-text"
    v-model="row[column.column]"
    ref="input"
    v-bind:readonly="inspectorPreferences.readOnly"
    @focus="$emit('focus', $event)"
    @blur="$emit('blur', $event)"
    />


    <div
    v-bind:tabindex="containerTabIndex"
    @focus="onContainerFocus"
    class="inspector-table-dropdown-container"
    >
    <backend-component-dropdown
    :options="options"
    :placeholder="column.placeholder"
    :tabindex="0"
    :disabled="inspectorPreferences.readOnly"
    :allow-empty="true"
    track-by="code"
    label="label"
    ref="editor"
    v-model="selectedValue"
    select-label=""
    selected-label=""
    deselect-label=""
    @input="updateValue"
    @open="onFocus"
    @close="onBlur"
    >
    <span slot="noResult">Vaihtoehtoja ei löytynyt</span>
    </backend-component-dropdown>

    <div class="dropdown-placeholder" v-if="!hasValue" v-text="column.placeholder"></div>
    </div>


    <div>
    <backend-component-inspector-group
    :group-name="control.title"
    :obj="editedObject"
    :controls="control.properties"
    :splitter-data="splitterData"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-unique-id="inspectorUniqueId"
    :inspector-preferences="inspectorPreferences"
    ref="group"
    >
    </backend-component-inspector-group>
    </div>


    <div>
    <backend-component-inspector-group
    :group-name="control.title"
    :obj="editedObject"
    :controls="nestedControlProperties"
    :splitter-data="splitterData"
    :depth="depth"
    :group-value="groupValue"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-unique-id="inspectorUniqueId"
    :inspector-preferences="inspectorPreferences"
    :loading="loadingDynamicOptions"
    ref="group"
    >
    </backend-component-inspector-group>
    </div>


    <div
    data-lang-key-required="Avainkenttä on pakollinen"
    data-lang-value-required="Arvokenttä on pakollinen"
    >
    <backend-component-inspector-group
    :group-name="control.title"
    :obj="editedObject"
    :controls="nestedControlProperties"
    :splitter-data="splitterData"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :group-value="groupValue"
    :layout-update-data="layoutUpdateData"
    :inspector-unique-id="inspectorUniqueId"
    :inspector-preferences="inspectorPreferences"
    :hide-bottom-border="true"
    ref="group"
    >
    </backend-component-inspector-group>
    </div>


    <div
    data-lang-error="Virhe"
    data-lang-prop-cant-be-empty="Ominaisuus :property ei voi olla tyhjä"
    data-lang-key-value-exists="Arvo on jo määritelty: :property_value"
    >
    <backend-component-inspector-group
    :group-name="control.title"
    :obj="editedObject"
    :parent-obj="obj"
    :controls="nestedControlProperties"
    :splitter-data="splitterData"
    :depth="depth"
    :panel-update-data="panelUpdateData"
    :layout-update-data="layoutUpdateData"
    :inspector-unique-id="inspectorUniqueId"
    :inspector-preferences="inspectorPreferences"
    ref="group"
    @inspectorcommand="onInspectorCommand"
    >
    </backend-component-inspector-group>
    </div>


    <div
    class="component-backend-inspector-table"
    data-lang-add-item="Lisää kohde"
    >
    <table v-if="hasValues">
    <tbody>
    <tr v-for="(record, key) in obj">
    <td class="no-sub-controls" :class="{clickable: !inspectorPreferences.readOnly}" @click.stop="onItemClick(key)">
    <div class="clickable-data-container">
    <backend-component-inspector-control-objectlist-record-title
    :control="control"
    :record="record"
    :parent-obj="parentObj"
    :obj="obj"
    ></backend-component-inspector-control-objectlist-record-title>
    <button v-if="!inspectorPreferences.readOnly" @click.stop.prevent="onRemoveItemClick(key)" class="remove-row-btn"></button>
    </div>
    </td>
    </tr>
    </tbody>
    </table>

    <div class="inspector-padding-control-left table-control-links">
    <a
    href="#"
    class="add-item-link"
    :class="{disabled: inspectorPreferences.readOnly || !displayAddItem}"
    :disabled="inspectorPreferences.readOnly || !displayAddItem"
    @click.stop.prevent="onAddItemClick"
    v-text="lang.addItem"
    ></a>
    </div>
    </div>


    <div class="title-container">
    <backend-component-loading-indicator v-if="loadingDynamicTitle"
    size="tiny"
    ></backend-component-loading-indicator>
    <template v-else>
    <span class="record-color" v-if="recordColor" :style="{'background-color': recordColor}"></span>
    <span v-text="recordTitle"></span>
    </template>
    </div>


    <div>
    <backend-component-loading-indicator v-if="loadingDynamicOptions"
    size="tiny"
    ></backend-component-loading-indicator>

    <backend-component-autocomplete
    v-if="!loadingDynamicOptions"
    ref="autocomplete"
    :search="onSearch"
    :getResultValue="getResultValue"
    :placeholder="placeholder"
    :defaultValue="initialValue"
    :readonly="inspectorPreferences.readOnly"
    v-bind:id="controlId"
    @input="onInput"
    @change="onChange"
    @update="onUpdate"
    @focus="onFocus"
    @blur="onBlur"
    >
    <template #result="{ result, props }">
    <li v-bind="props" class="autocomplete-result">
    {{ result.value }}
    </li>
    </template>
    </backend-component-autocomplete>
    </div>


    <div
    data-lang-error-not-image="Valitsemasi tiedosto ei ole kuva"
    data-lang-placeholder="Klikkaa valitaksesi kuva"
    class="inspector-control-clearable"
    >
    <div
    class="inspector-control clickable act-as-text-input"
    :class="cssClass"
    :tabindex="0"
    @focus="onFocus"
    @blur="onBlur"
    ref="input"
    v-text:value="displayedText"
    v-bind:readonly="inspectorPreferences.readOnly"
    @click.stop="onClick"
    @keydown.stop="onKeyDown"
    ></div>

    <button v-if="this.value && !inspectorPreferences.readOnly" @click.stop="onClearClick" class="clear-value"></button>
    </div>


    <div
    data-default-button-text="OK"
    >
    <backend-component-modal
    ref="modal"
    :aria-labeled-by="modalTitleId"
    :unique-key="uniqueId"
    :size="size"
    :store-position="true"
    :resizable="resizableWidth ? 'horizontal' : false"
    :resize-default-width="600"
    :close-by-esc="!readOnly"
    :modal-temporary-hidden="layoutUpdateData.modalTemporaryHidden"
    @hidden="onHidden"
    @resized="onResized"
    @shown="onShown"
    @enterkey="onEnterKey"
    >
    <template v-slot:content>
    <div class="modal-header">
    <h4 class="modal-title" v-bind:id="modalTitleId" v-text="title"></h4>
    <button
    @click.prevent="onCloseClick"
    type="button"
    class="btn-close"
    v-bind:disabled="readOnly"
    aria-label="Sulje"
    tabindex="0"
    ></button>
    </div>
    <div class="modal-body inspector-modal-host">
    <backend-component-inspector
    :data-schema="dataSchema"
    :data="data"
    :live-mode="liveMode"
    :unique-id="uniqueId"
    :layout-update-data="layoutUpdateData"
    :read-only="readOnly"
    ref="inspector"
    >
    </backend-component-inspector>
    </div>
    <div class="modal-footer">
    <button
    type="button"
    class="btn btn-primary btn-default-action"
    data-default-focus
    @click="onApplyClick"
    v-text="primaryButtonText"
    v-bind:disabled="readOnly"
    ></button>
    <span class="button-separator">tai</span>
    <button
    class="btn btn-link text-muted"
    :class="{disabled: readOnly}"
    @click.prevent="onCancelClick"
    >Peruuta</button>
    </div>
    </template>
    </backend-component-modal>
    </div>


    <div
    class="component-backend-splitter" :class="cssClass"
    >
    <div class="flex-layout-item fix splitter-first-panel" :style="firstPanelStyle" ref="firstPanel">
    <slot name="first">
    Left panel
    </slot>
    </div>

    <div
    class="flex-layout-item fix splitter-handle"
    :class="{dragging: dragging}"
    ref="handle"
    @mousedown.stop="onHandleMouseDown"
    ></div>

    <div class="flex-layout-item stretch relative">
    <slot name="second">
    Right panel
    </slot>
    </div>
    </div>


    <div
    class="component-backend-tabs flex-layout-column"
    :class="cssClass"
    data-lang-close="Sulje välilehti"
    data-lang-close-all="Sulje kaikki"
    data-lang-close-others="Sulje muut"
    data-lang-close-saved="Sulje tallennetut"
    >
    <div class="tablist-container flex-layout-item fix" v-show="!hideTabPanel">
    <div class="flex-layout-row tablist-scrollable-container" :class="{'has-fixed-panel': supportsFullScreen && hasTabs}" ref="scrollableTabsContainer">
    <div class="tabs-scrollable flex-layout-item stretch" ref="scrollable">
    <div
    class="tablist flex-layout-row"
    role="tablist"
    ref="tabList"
    v-bind:aria-label="ariaLabel"
    @keydown="onKeyDown"
    >
    <button
    v-for="tab in tabs"
    role="tab"
    data-component-backend-tab
    class="flex-layout-item"
    :class="{
    active: currentTabKey == tab.key,
    stretch: tabsStyle == 'document',
    fix: tabsStyle == 'form',
    'has-icon': tab.icon || tab.fatalError,
    'has-close-button': closeable
    }"
    v-bind:id="getTabId(tab, 'tab')"
    v-bind:aria-controls="getTabId(tab, 'panel')"
    v-bind:aria-selected="currentTabKey == tab.key ? 'true' : 'false'"
    v-bind:tabindex="currentTabKey == tab.key ? 0 : -1"
    v-bind:data-tooltip-text="getTooltipText(tab)"
    @click.ignore="onClick(tab)"
    @mouseup.middle="onMiddleClick(tab)"
    @contextmenu.stop="onContextMenu($event, tab)"
    >
    <span
    class="tab-icon"
    :class="{'tab-error': tab.fatalError}"
    v-if="tab.icon"
    aria-hidden="true"
    >
    <span
    class="tab-icon-background"
    v-bind:style="getTabIconStyle(tab)"
    >
    <i
    :class="tab.icon.cssClass"
    ></i>
    </span>

    <i class="backend-icon-background tab-error"></i>
    </span>

    <span v-text="tab.label" role="text"></span>

    <span
    class="backend-icon-background-pseudo close-tab"
    :class="{'has-changes': tab.hasChanges}"
    v-bind:tabindex="currentTabKey == tab.key ? 0 : -1"
    v-if="closeable"
    role="button"
    aria-hidden="true"
    aria-label="Sulje välilehti"
    v-bind:title="closeTooltip ? '' : 'Sulje välilehti'"
    v-bind:data-tooltip-text="closeTooltip"
    v-bind:data-tooltip-hotkey="closeTooltipHotkey"
    @click.stop.prevent="onCloseClick(tab)"
    >✕</span>
    </button>
    </div>
    </div>
    <div class="flex-layout-item fix fixed-right tabs-toolbar" v-if="supportsFullScreen && hasTabs">
    <div class="toolbar-container">
    <button
    class="backend-toolbar-button icon-only"
    data-tooltip-text="Kokoruudun tila"
    @click.stop.prevent="onToggleFullscreen"
    >
    <i :class="{'icon-fullscreen': !isFullScreen, 'icon-fullscreen-collapse': isFullScreen}"></i>
    </button>
    </div>
    </div>
    </div>

    </div>

    <template v-if="!noPanes">
    <div
    v-for="tab in tabs"
    role="tabpanel"
    tabindex="0"
    :key="getTabUniqueKey(tab)"
    v-show="currentTabKey == tab.key"
    v-bind:id="getTabId(tab, 'panel')"
    v-bind:aria-labelledby="getTabId(tab, 'tab')"
    class="tabpanel flex-layout-item stretch relative"
    :class="tabPanelCssClass"
    >
    <component
    v-if="!useSlots"
    :ref="getTabComponentRefName(tab)"
    v-bind:is="tab.component"
    :component-data="tab.componentData"
    @tabfatalerror="onTabFatalError(tab)"
    @tabkeychanged="onTabkeyChanged"
    @tabclose="onHostedComponentTabClose(tab)"
    ></component>
    <slot v-else :name="tab.key"></slot>
    </div>
    </template>

    <slot v-if="!tabs.length" name="noTabsView"></slot>

    <backend-component-dropdownmenu
    :items="contextMenuItems"
    :menu-id="contextMenuId"
    :labeled-by-id="contextMenuLabeledById"
    ref="contextmenu"
    @command="onMenuItemCommand"
    ></backend-component-dropdownmenu>
    </div>








    <div
    class="flex-layout-column component-backend-monaco-editor"
    :class="cssClass"
    data-configuration="{"vendorPath":"https:\/\/www.ringraceclub.fi\/modules\/backend\/vuecomponents\/monacoeditor\/assets\/vendor\/monaco","fontSize":"12px","tabSize":4,"useEmmet":true,"yamlSchemas":[{"uri":"https:\/\/www.ringraceclub.fi\/modules\/tailor\/assets\/js\/blueprint-yaml-schema.json","fileMatch":["*-blueprint.yaml"]}],"renderLineHighlight":"all","useTabStops":false,"renderIndentGuides":false,"renderWhitespace":"all","autoClosingBrackets":"languageDefined","autoClosingQuotes":"languageDefined","hover":{"delay":750},"wordWrap":"off","theme":"vs-dark"}"
    >
    <div class="flex-layout-item fix" v-if="showTabs">
    <backend-component-tabs
    :tabs="editorTabs"
    :closeable="false"
    :no-panes="true"
    :container-css-class="tabsContainerCssClass"
    :tooltips-enabled="false"
    tabs-style="monaco-editor"
    @tabselected="onTabSelected"
    ></backend-component-tabs>
    </div>

    <div class="flex-layout-item stretch position-relative h-100" style="overflow: hidden">
    <div
    class="flex-layout-column fill-container"
    :class="editorContainerCssClass"
    ref="editorContainer"
    @dragover.capture="onDragOver"
    @drop.capture="onDragDrop"
    ></div>
    </div>
    </div>


    Päivämäärä





























    Kuva














    Valitse




    Tyhjennä

































    <div class="item-object item-object-image ">

    <div class="file-data-container">
    <div class="file-data-container-inner">
    <div class="icon-container image">
    <img data-thumb-url alt="" />
    <video data-thumb-url preload="metadata" data-document-type="video"></video>
    <audio data-thumb-url controls preload="metadata" data-document-type="audio"></audio>
    </div>
    <div class="info">
    <h4 class="filename">
    <span data-title></span>
    </h4>
    </div>
    </div>
    </div>
    </div>


    Linkki






    -- Ei valittu --

    Sisäinen

    Ulkoinen

    -- Ei valittu --

    Valitse pudotusvalikosta -Ei valittu-, jos et tarvitse linkkiä.

    Teksti






    Linkki sivulle







    Etusivu

    FSBK KymiRing 26 tulokset

    Tapahtumat

    Autojen ratapäivä

    Naisten tapahtuma 25.4.2025

    Ratapäivät -tapahtumat

    Säännöt

    Ratapäivät -Ajoharjoittelutapahtumat

    Track day rules

    Turvallisuus info

    Endurosäännöt

    KymiRing 23.7.2026

    KymiRing 6.-7.6.2026

    KymiRing 29.5.2025

    Äitienpäivän ajot KymiRing 10.5.2026

    KymiRing 15.8.2025

    EnduroDays 23.7.2026

    Susikosken päräys paraati 29.5.2025

    KymiRing 13.-14.9.2025

    FinSBK205

    Hymyilevän Motoristin Kevätpäivä by Ring Race Club

    KymiRing 19-20.7.2025

    Finnish Superbike SM KymiRing 2026

    Finnish Racing Championship SM KymiRing 2026

    Finnish Superbike KymiRing 2024

    Katsojalle info

    Kumppanit

    Yhteystiedot

    Media

    Toimitsijaksi

    Kartta ja etäisyydet

    Majoitus

    Kerhon jäsenistön kalenteri

    Tapahtumakalenteri

    Kesäkuun vauhtilauantai 19.6

    Menneet tapahtumat

    Ratapäivä 5.7.2020

    KymiRing 21.-22.8.2021

    Heinäkuun ratapäivät viikonloppu 17.-18.7.2021

    KymiRing iltapäivä 4.8.2022

    KymiRing 13.-14.8.2022

    KymiRing 27.-28.8.2022

    Talkoolais- ja jäsenpäivä 1.10.2022

    KymiRing Helatorstai 18.5.2023

    KymiRing 10.-11.6.2023

    KymiRing 6.7.2023

    KymiRing 26.7.2023

    KymiRing 9.-10.8.2023

    Jäsen- ja talkoolaispäivä 9.9.2023

    KymiRing 16.-17.9.2023

    KymiRing 8.-9.6.2024

    KymiRing 13.-14.7.2024

    Finnish Superbike KymiRing 2024

    KymiRing 11.08.2024

    Talkoolais- ja Jäsenpäivä 24.8.2024

    KymiRing 7.-8.9.2024

    Kaudenavaus tapahtuma 25.-27.4.2025

    KymiRing 29.5.2025 Helatorstai

    Jäsenten ja talkoolaisten iltapäivä

    KymiRing 28.-29.6.2025

    KymiRing 19.-20.7.2025

    Finnish Superbike KymiRing 2025

    KymiRing 14.8.2025

    KymiRing 13.-14.9.2025

    HMKP26

    Äitienpäivänajot 2026

    KymiRing 6.-7.6.2026

    Finnish Superbike SM KymiRing 2026

    Kerhomatka imatranajoihin 6.-7.7.2024

    Nuorison tapahtumat

    Palvelut

    Finnish Racing Championship KymiRing 2026

    Caravan Park Ravilinna

    Suomeksi

    In English

    Camping info/ safety

    Ring Race Club

    Esittely

    Rekisteriseloste

    Jäseneksi

    Ring Race Club in English

    Vuosikokous 2026

    Linkit

    Jäsentapahtumat

    Jäsenkokoontumiset

    Kauden 2025 talkoolaisten tapahtuma

    Koulutus

    MP26 Messut 30.1-1.2.2026 Helsingin Messukeskus

    Classic Motorshow 2.-3.5.2026 Lahden messukeskus

    Jäsentiedotteet

    Helmikuu 2025

    Maaliskuu 2025

    Toukokuu 2025

    Kesäkuu 2025

    Heinäkuu 2025

    Syyskuu 2025

    Lokakuu 2025

    Joulukuu 2025

    Yhteystiedot

    Ratapäivät -Ajoharjoittelutapahtumat

    Ulkoinen linkki (lisää myös http:// tai https://)











    Ring Race Club järjestää FRC kilpailun ensimmäistä kertaa KymiRingillä