App Components
Vue reusable components
AccountButton
Header trigger that shows the current user name, notifications,
Props
| Name | Type | Default | Required |
|---|---|---|---|
| menuIsClosed | Boolean |
true | No |
| isLogged | Boolean |
false | No |
| userName | String |
null | No |
| ariaLabel | String |
null | No |
Examples
<AccountButton
:menu-is-closed="true"
:is-logged="true"
user-name="John Doe"
aria-label="Toggle menu"
@triggerToggleMenu="handleMenuToggle"
/>
Source: AccountButton.vue
App
Root application shell coordinating auth checks and layout visibility.
Source: App.vue
Burger
Mobile navigation drawer listing shortcuts, actions, and account links.
Examples
Source: Burger.vue
CalendarFilter
Date range selector used inside the sequences filters modal.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| type | String |
No | |
| rangeSelected | Object |
{ start: null, end: null, type: '' } | No |
Examples
<CalendarFilter
type="date-range"
:range-selected="{ start: null, end: null, type: '' }"
@triggerDate="handleDateRange"
@triggerCloseModal="handleClose"
/>
Source: CalendarFilter.vue
Card
Presentational card showing an illustration, title, and short
Props
| Name | Type | Default | Required |
|---|---|---|---|
| title | String |
null | No |
| description | String |
null | No |
| imgSrc | String |
null | No |
| imgAlt | String |
null | No |
Examples
<Card
title="Showcase your sequence"
description="Upload your photos and share them with the community."
img-src="illustrations/share.svg"
img-alt="Share your pictures"
/>
Source: Card.vue
CompleteUpload
Displays contextual information about an upload set and lets
Props
| Name | Type | Default | Required |
|---|---|---|---|
| uploadSets | Object |
{} | Yes |
Emits
| Event | Value Type |
|---|---|
| triggerComplete | UploadSetCreatedInterface |
Examples
Source: CompleteUpload.vue
DateInterval
Displays the time interval between the first and last capture
Examples
<DateInterval
:first-date="new Date('2024-01-01T10:00:00')"
:last-date="new Date('2024-01-01T14:30:00')"
/>
Source: DateInterval.vue
EditText
Component for displaying and editing text inline.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| defaultText | String |
null | No |
| isLoading | Boolean |
false | No |
| isLoaded | Boolean |
false | No |
| formTitle | String |
null | No |
Emits
| Event | Value Type |
|---|---|
| triggerNewText | string | null |
Examples
<EditText
:default-text="'My title'"
:is-loading="false"
:is-loaded="true"
form-title="Form title"
@triggerNewText="handleTextChange"
/>
Source: EditText.vue
FolderList
Displays the folders currently being uploaded along with their
Props
| Name | Type | Default | Required |
|---|---|---|---|
| pictures | Array |
[] | No |
| currentFolder | String |
null | No |
Examples
Source: FolderList.vue
HeaderApp
Main navigation component of the application.
Examples
Source: HeaderApp.vue
HeaderOpen
Desktop dropdown menu showing authenticated shortcuts,
Props
| Name | Type | Default | Required |
|---|---|---|---|
| menuIsClosed | Boolean |
true | No |
| userName | String |
No |
Examples
Source: HeaderOpen.vue
ImageItem
Component for displaying an image item in a sequence.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| disabled | Boolean |
false | No |
| created | String |
null | No |
| href | String |
null | No |
| hrefHd | String |
null | No |
| imageId | String |
null | No |
| selectedOnMap | Boolean |
false | No |
| canEdit | Boolean |
false | No |
| seqVisibility | String |
No | |
| visibility | String |
No | |
| status | String |
No |
Emits
| Event | Value Type |
|---|---|
| trigger | void |
Examples
<ImageItem
:disabled="false"
created="2024-01-01"
href="/path/to/image.jpg"
href-hd="/path/to/image-hd.jpg"
image-id="123"
:selected-on-map="false"
:is-sequence-owner="true"
visibility="anyone"
seq-visibility="anyone"
status="ready"
@trigger="handleImageClick"
>
<template #checkbox>
<input type="checkbox" />
</template>
</ImageItem>
Source: ImageItem.vue
ImageThumb
Displays a compact thumbnail with hover preview for sequence
Props
| Name | Type | Default | Required |
|---|---|---|---|
| count | Number |
0 | No |
| href | String |
No |
Examples
Source: ImageThumb.vue
InformationCard
Component for displaying an information card with an icon, title, text content,
Props
| Name | Type | Default | Required |
|---|---|---|---|
| text | String |
null | No |
| look | String |
No |
Examples
<InformationCard
text="This is an information message"
look="blue"
>
<template #title>
<h3>Information Title</h3>
</template>
<template #button>
<Button text="Action" />
</template>
<template #cross>
<button @click="close">×</button>
</template>
</InformationCard>
Source: InformationCard.vue
Input
Reusable input component supporting text and number types.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| type | String |
'text' | No |
| min | String |
No | |
| max | String |
No | |
| maxlength | String |
No | |
| text | \[String |
null | No |
| placeholder | \[String |
No |
Emits
| Event | Value Type |
|---|---|
| input | string |
Examples
<Input
type="text"
:text="initialValue"
placeholder="Enter text"
maxlength="50"
@input="handleInput"
/>
<Input
type="number"
:text="0"
min="0"
max="100"
placeholder="Enter number"
@input="handleNumberInput"
/>
Source: Input.vue
InputCheckbox
Custom checkbox component supporting checked, unchecked, and indeterminate states.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| name | String |
null | No |
| label | String |
No | |
| isChecked | Boolean |
false | No |
| isIndeterminate | Boolean |
false | No |
Emits
| Event | Value Type |
|---|---|
| trigger | CheckboxInterface |
Examples
<InputCheckbox
name="my-checkbox"
label="Check this option"
:is-checked="false"
:is-indeterminate="false"
@trigger="handleCheckboxChange"
/>
Source: InputCheckbox.vue
InputRadio
Custom radio button component with support for icons, labels, and hidden styling.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| disabled | Boolean |
false | No |
| isHidden | Boolean |
false | No |
| name | String |
null | No |
| icon | String |
null | No |
| id | String |
No | |
| label | String |
No | |
| value | String |
null | No |
| hasSameValues | Boolean |
false | No |
Emits
| Event | Value Type |
|---|---|
| trigger | string |
Examples
<InputRadio
id="option1"
name="options"
label="Option 1"
icon="bi bi-circle"
:value="selectedValue"
:disabled="false"
:is-hidden="false"
:has-same-values="false"
@trigger="handleRadioChange"
/>
Source: InputRadio.vue
InputSwitch
Toggle switch component with support for increase/decrease labels and icons.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| isChecked | Boolean |
false | No |
| look | String |
No |
Emits
| Event | Value Type |
|---|---|
| trigger | { isChecked: boolean } |
Examples
<InputSwitch
:is-checked="false"
look=""
@trigger="handleSwitchChange"
/>
<InputSwitch
:is-checked="true"
look="rounded"
@trigger="handleSwitchChange"
/>
Source: InputSwitch.vue
InputUpload
File upload component supporting drag-and-drop, file selection, and folder upload.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| isLogged | Boolean |
false | No |
| disabled | Boolean |
false | No |
| text | String |
null | No |
| textPictureType | String |
null | No |
| textSecondPart | String |
null | No |
| look | String |
No |
Emits
| Event | Value Type |
|---|---|
| trigger | FolderInterface\[\] | File\[\] | FileList |
| triggerCancel | void |
| triggerDrop | void |
Examples
<InputUpload
:is-logged="true"
:disabled="false"
text="Drop files here"
look="yellow"
@trigger="handleFiles"
@triggerCancel="handleCancel"
@triggerDrop="handleDrop"
/>
Source: InputUpload.vue
Legal
Wrapper layout for legal pages. Displays an optional summary
Props
| Name | Type | Default | Required |
|---|---|---|---|
| htmlContent | String |
No |
Examples
<Legal
html-content="<p>Legal content here</p>"
>
<template #summary>
<Summary />
</template>
</Legal>
Source: Legal.vue
License
Component for displaying license information with an icon, translated text, and a link.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| url | String |
null | No |
| text | String |
null | No |
Examples
<License
url="https://creativecommons.org/licenses/by/4.0/"
text="CC BY 4.0"
>
<i class="bi bi-cc-circle"></i>
</License>
Source: License.vue
Loader
Animated loading spinner component with configurable size and color.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| text | String |
null | No |
| look | String |
'sm' | No |
| color | String |
'blue' | No |
| isLoaded | Boolean |
true | No |
Examples
<Loader
look="md"
color="blue"
:is-loaded="false"
/>
<Loader
look="sm"
color="white"
:is-loaded="true"
/>
Source: Loader.vue
LoaderPicturesDetails
Displays a compact counter showing the number of pictures already
Props
| Name | Type | Default | Required |
|---|---|---|---|
| look | String |
No | |
| text | String |
null | No |
| picturesCount | Number |
null | No |
| pictures | Number |
null | No |
Examples
Source: LoaderPicturesDetails.vue
LoginRegisterButton
Dual-call-to-action button redirecting users to the auth portal.
Examples
Source: LoginRegisterButton.vue
Modal
Bootstrap modal component with title and body slot.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| title | String |
No |
Examples
<Modal
ref="modalRef"
title="Modal Title"
>
<template #body>
<p>Modal content goes here</p>
</template>
</Modal>
// In script:
const modalRef = ref()
modalRef.value?.show() // or modalRef.value?.close()
Source: Modal.vue
MyTokens
Component for managing user API tokens and default visibility settings.
Examples
Source: MyTokens.vue
NotificationDetails
Notification details component
Examples
Source: NotificationDetails.vue
Notifications
Lightweight badge displaying the number of notifications on an account
Props
| Name | Type | Default | Required |
|---|---|---|---|
| notifications | Object |
null | No |
Examples
Source: Notifications.vue
Pagination
Pagination button component for navigating through paginated content.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| href | String |
null | No |
Emits
| Event | Value Type |
|---|---|
| trigger | string |
Examples
<Pagination
href="/api/items?page=2"
:self-link="{ href: '/api/items?page=1' }"
type="right"
@trigger="handlePagination"
/>
Source: Pagination.vue
PanelOrientationManagement
Control panel that lets contributors fine-tune the orientation
Props
| Name | Type | Default | Required |
|---|---|---|---|
| roadDegrees | Number |
0 | No |
| seqBruteDeg | Number |
0 | No |
| isLoading | Boolean |
false | No |
Emits
| Event | Value Type |
|---|---|
| triggerAngle | number |
| triggerMovingAngle | number |
Examples
<PanelOrientationManagement
:road-degrees="150"
:seq-brute-deg="145"
:is-loading="false"
@triggerAngle="handleAngleChange"
@triggerMovingAngle="handleMovingAngle"
/>
Source: PanelOrientationManagement.vue
PanelPhotosManagement
Management panel for displaying and managing sequence pictures.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| pictures | Array |
[] | No |
| picturesToDelete | Array |
[] | No |
Emits
| Event | Value Type |
|---|---|
| triggerInputCheck | CheckboxInterface |
| triggerInputCheckItem | string |
| triggerGoToNextPage | string |
| triggerSelectImageAndMove | PicturesInterface |
| triggerPatchOrDeleteCollectionItems | string |
Examples
<PanelPhotosManagement
:pictures="photoList"
:pictures-to-delete="selectedIds"
:sequence="currentSequence"
:pagination-links="links"
:is-sequence-owner="true"
@triggerInputCheck="handleBulkSelection"
@triggerPatchOrDeleteCollectionItems="handleDelete"
/>
Source: PanelPhotosManagement.vue
PanelSortManagement
Sorting form for sequence pictures allowing users to pick the
Props
| Name | Type | Default | Required |
|---|---|---|---|
| sequenceSorted | String |
null | No |
Emits
| Event | Value Type |
|---|---|
| triggerSort | string |
Examples
Source: PanelSortManagement.vue
ParamsPanel
Collapsible advanced upload settings letting contributors tweak
Props
| Name | Type | Default | Required |
|---|---|---|---|
| isEditionMode | Boolean |
false | No |
| angleResponse | Number |
0 | No |
Emits
| Event | Value Type |
|---|---|
| triggerParams | UploadParamsInterface |
| triggerMovingAngle | number |
| triggerUpdateUploadSets | UploadSetCreatedInterface |
Examples
<ParamsPanel
:is-edition-mode="false"
:angle-response="angle"
@triggerParams="handleParams"
@triggerMovingAngle="previewAngle"
@triggerUpdateUploadSets="refreshUploadSet"
/>
Source: ParamsPanel.vue
PictureItem
Displays an uploaded picture row in the upload summary. Shows the
Props
| Name | Type | Default | Required |
|---|---|---|---|
| name | String |
No | |
| text | String |
No | |
| look | String |
'default' | No |
Examples
<PictureItem
name="IMG_001.jpg"
text="Uploaded successfully"
look="success"
>
<Button look="link--blue-dark" text="View" />
</PictureItem>
Source: PictureItem.vue
ProgressBar
Visualizes upload progress including errors. Displays a green
Props
| Name | Type | Default | Required |
|---|---|---|---|
| percentage | Number |
0 | No |
| errorPercentage | Number |
0 | No |
| itemsBroken | Number |
0 | No |
| itemsRejected | Number |
0 | No |
Examples
Source: ProgressBar.vue
SequenceSection
Displays the list of sequences created from the current upload
Props
| Name | Type | Default | Required |
|---|---|---|---|
| listDisplayed | Boolean |
false | No |
| uploadSets | Object |
null | No |
| newSeqTitle | String |
No | |
| isLoading | Boolean |
false | No |
| isLoaded | Boolean |
false | No |
Examples
<SequenceSection
:list-displayed="hasSequences"
:upload-sets="currentUploadSet"
:new-seq-title="pendingTitle"
:is-loading="isSaving"
:is-loaded="hasLoaded"
/>
Source: SequenceSection.vue
SequenceStatus
Component for displaying sequence status or visibility with icon and translated text.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| status | String |
null | No |
| isSquare | Boolean |
true | No |
Examples
<SequenceStatus
status="waiting-for-process"
:is-square="true"
/>
<SequenceStatus
status="anyone"
:is-square="false"
/>
Source: SequenceStatus.vue
Summary
Fetches and displays the localized end-user license summary.
Examples
Source: Summary.vue
TabPanel
Tab panel component for switching between different views (photos, orientation, sort).
Props
| Name | Type | Default | Required |
|---|---|---|---|
| picturesCount | Number |
0 | No |
| panelSelected | String |
No | |
| isLoading | Boolean |
false | No |
| canEditOrientation | Boolean |
false | No |
| canEditSort | Boolean |
false | No |
Examples
<TabPanel
:pictures-count="10"
panel-selected="photos"
:is-loading="false"
:is-sequence-owner="true"
@trigger="handleTabChange"
/>
Source: TabPanel.vue
TagsLabel
Presents a label with an optional tooltip shown on hover, used
Props
| Name | Type | Default | Required |
|---|---|---|---|
| label | String |
null | No |
| description | String |
null | No |
Examples
Source: TagsLabel.vue
TagsPanel
Wrapper around the `` custom element that
Wrapper around the `` custom element that
Props
| Name | Type | Default | Required |
|---|---|---|---|
| semanticsEditor | Array |
[] | No |
| isEditionMode | Boolean |
false | No |
| uploadSetId | String |
No |
Emits
| Event | Value Type |
|---|---|
| triggerSemantics | { semantics: TagInterface\[\] } |
| triggerUpdateUploadSets | UploadSetCreatedInterface |
Examples
<TagsPanel
:semantics-editor="currentSemantics"
:is-edition-mode="true"
upload-set-id="123"
@triggerSemantics="handleSemantics"
@triggerUpdateUploadSets="refreshUploadSet"
/>
Source: TagsPanel.vue
Terminal
Terminal-style component for displaying installation and upload commands.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| textUpload | String |
No | |
| textInstall | String |
No |
Examples
Source: Terminal.vue
TransportPanel
Provides quick transport-mode selectors (walk, bike, car, other)
Emits
| Event | Value Type |
|---|---|
| triggerSemantics | { transport: TagInterface } |
Examples
Source: TransportPanel.vue
TreatmentBlock
Displays textual progress states and renders the shared
Props
| Name | Type | Default | Required |
|---|---|---|---|
| uploadSets | Object |
null | No |
| percentage | Number |
0 | No |
| errorPercentage | Number |
0 | No |
| progressClasse | String |
No |
Examples
<TreatmentBlock
:upload-sets="currentUploadSet"
:percentage="75"
:error-percentage="10"
progress-classe="text-blue"
>
<template #subtitle>
<h3>Processing status</h3>
</template>
</TreatmentBlock>
Source: TreatmentBlock.vue
TripleSelectButton
Component for selecting visibility level (anyone, logged-only, owner-only) for images.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| imagesFullSelected | Array |
[] | No |
| possibleVisibilities | Array |
[] | No |
| canEditVisibility | Boolean |
false | No |
Emits
| Event | Value Type |
|---|---|
| triggerVisibility | string |
Examples
<TripleSelectButton
:images-full-selected="selectedImages"
:possible-visibilities="['anyone', 'logged-only', 'owner-only']"
@triggerVisibility="handleVisibilityChange"
/>
Source: TripleSelectButton.vue
Tutorial
Displays static tutorial images guiding Android users through
Examples
Source: Tutorial.vue
UploadError
Summary card grouping upload errors or warnings. Displays a
Props
| Name | Type | Default | Required |
|---|---|---|---|
| count | Number |
0 | No |
| severity | String |
null | No |
| pictures | Array |
[] | No |
Examples
Source: UploadError.vue
UploadErrorBlock
Accordion showing grouped upload errors for a specific reason.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| errors | Array |
[] | No |
| isOpen | Boolean |
false | No |
Examples
Source: UploadErrorBlock.vue
UploadErrorMessage
Displays a simple error banner with an icon and message for the
Props
| Name | Type | Default | Required |
|---|---|---|---|
| uploadError | String |
null | No |
Examples
Source: UploadErrorMessage.vue
UploadingBlock
High-level block orchestrating the upload progress UI:
Examples
Source: UploadingBlock.vue
UploadingImg
Static illustration component showing a person graphic with a rotating loader animation.
Examples
Source: UploadingImg.vue
UploadLoader
Displays the upload progress spinner, success/error states,
Props
| Name | Type | Default | Required |
|---|---|---|---|
| loadPercentage | String |
'0%' | No |
| isLoaded | Boolean |
false | No |
| isLoading | Boolean |
false | No |
| uploadedSequence | Object |
null | No |
| picturesCount | Number |
null | No |
| picturesCountErr | Number |
null | No |
| picturesTotalCount | Number |
null | No |
| otherFilesCount | Number |
null | No |
| uploadError | String |
null | No |
Examples
<UploadLoader
:load-percentage="'75%'"
:is-loading="true"
:uploaded-sequence="sequence"
:pictures-count="120"
/>
Source: UploadLoader.vue
UploadSetBlocks
Lists unfinished upload sets so contributors can resume or delete
Examples
Source: UploadSetBlocks.vue
UploadSummary
Displays detailed information about a single upload set, including
Props
| Name | Type | Default | Required |
|---|---|---|---|
| uploadSets | Object |
null | No |
| isLoading | Boolean |
false | No |
Examples
<UploadSummary
:upload-sets="currentUploadSet"
:is-loading="isLoading"
@triggerComplete="handleComplete"
@triggerResetUpload="startNewUpload"
/>
Source: UploadSummary.vue
VisibilityBlock
Radio button group that lets contributors choose the visibility
Props
| Name | Type | Default | Required |
|---|---|---|---|
| visibility | String |
null | No |
| possibleVisibilities | Array |
[] | No |
| description | String |
null | No |
| ownerOnlyDescription | String |
null | No |
| loggedOnlyDescription | String |
null | No |
| anyoneDescription | String |
null | No |
Emits
| Event | Value Type |
|---|---|
| triggerVisibility | string |
Examples
<VisibilityBlock
visibility="anyone"
:possible-visibilities="['anyone', 'logged-only', 'owner-only']"
description="Choose visibility level"
@triggerVisibility="handleVisibilityChange"
/>
Source: VisibilityBlock.vue
WebsiteViewer
Multi-purpose Panoramax container component that can render the viewer, editor, or coverage map.
Props
| Name | Type | Default | Required |
|---|---|---|---|
| id | String |
'viewer' | No |
| viewerType | String |
'viewer' | No |
| picId | String |
null | No |
| seqId | String |
null | No |
| userId | \[String |
null | No |
Emits
| Event | Value Type |
|---|---|
| triggerPicId | { seqId: string; metadatas?: string } |
| triggerPicIdAndRedirect | string |
| triggerReady | HTMLElement? |
| triggerPicIdAndSelect | string |
Examples
<WebsiteViewer
id="viewer-1"
viewer-type="viewer"
:params="{ map: {} }"
@triggerPicId="handlePicSelection"
@triggerReady="handleViewerReady"
/>
<WebsiteViewer
id="editor-1"
viewer-type="editor"
seq-id="123"
pic-id="456"
:params="{ raster: {} }"
@triggerReady="handleEditorReady"
/>
Source: WebsiteViewer.vue
WidgetOrientation
Interactive widget allowing users to rotate the capture
Props
| Name | Type | Default | Required |
|---|---|---|---|
| roadDegrees | Number |
0 | No |
| seqBruteDeg | Number |
0 | No |
| indexCar | Number |
1 | No |
Emits
| Event | Value Type |
|---|---|
| triggerAngle | number |
| triggerMovingAngle | number |
Examples
<WidgetOrientation
:road-degrees="150"
:seq-brute-deg="orientation"
:index-car="3"
@triggerAngle="handleAngleChange"
@triggerMovingAngle="handleMovingAngle"
/>
Source: WidgetOrientation.vue