feat: Dark Mode (#7471)

This commit is contained in:
Sivin Varghese
2023-07-21 22:10:25 +05:30
committed by GitHub
parent 480f34803b
commit 40ec0d109a
264 changed files with 2932 additions and 6814 deletions
@@ -9,7 +9,7 @@
@close-key-shortcut-modal="closeKeyShortcutModal"
@show-add-label-popup="showAddLabelPopup"
/>
<section class="app-content columns">
<section class="app-content flex-1 px-0">
<router-view />
<command-bar />
<account-selector
@@ -1,6 +1,6 @@
<template>
<div
class="small-12 medium-3 bg-white contact--panel"
class="w-[25%] bg-white dark:bg-slate-900 contact--panel"
:class="{ 'border-left': showAvatar }"
>
<contact-info
@@ -148,38 +148,20 @@ export default {
<style lang="scss" scoped>
::v-deep {
.contact--profile {
padding-bottom: var(--space-slab);
margin-bottom: var(--space-normal);
@apply pb-3 mb-4;
}
}
.contact--panel {
height: 100%;
font-size: var(--font-size-small);
overflow-y: auto;
overflow: auto;
position: relative;
@apply border-r border-slate-50 dark:border-slate-700;
@apply border-r border-slate-50 dark:border-slate-700 h-full text-sm overflow-y-auto relative;
}
.list-group {
.list-group-item {
background-color: var(--white);
@apply bg-white dark:bg-slate-900;
}
}
.conversation--details {
padding: 0 var(--space-normal);
}
.contact--mute {
color: var(--r-400);
display: block;
text-align: left;
}
.contact--actions {
display: flex;
flex-direction: column;
justify-content: center;
@apply py-0 px-4;
}
</style>
@@ -1,16 +1,18 @@
<template>
<div class="column">
<div>
<woot-modal-header :header-title="filterModalHeaderTitle">
<p>{{ filterModalSubTitle }}</p>
<p class="text-slate-600 dark:text-slate-200">
{{ filterModalSubTitle }}
</p>
</woot-modal-header>
<div class="column modal-content">
<div v-if="isSegmentsView" class="columns">
<div class="p-8">
<div v-if="isSegmentsView">
<label class="input-label" :class="{ error: !activeSegmentNewName }">
{{ $t('CONTACTS_FILTER.SEGMENT_LABEL') }}
<input
v-model="activeSegmentNewName"
type="text"
class="name-input"
class="folder-input border-slate-75 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100"
/>
<span v-if="!activeSegmentNewName" class="message">
{{ $t('CONTACTS_FILTER.EMPTY_VALUE_ERROR') }}
@@ -20,7 +22,9 @@
{{ $t('CONTACTS_FILTER.SEGMENT_QUERY_LABEL') }}
</label>
</div>
<div class="medium-12 columns filters-wrap">
<div
class="p-4 rounded-lg bg-slate-25 dark:bg-slate-700 border border-solid border-slate-50 dark:border-slate-700 mb-4"
>
<filter-input-box
v-for="(filter, i) in appliedFilters"
:key="i"
@@ -41,7 +45,7 @@
@resetFilter="resetFilter(i, appliedFilters[i])"
@removeFilter="removeFilter(i)"
/>
<div class="filter-actions">
<div class="mt-4">
<woot-button
icon="add"
color-scheme="success"
@@ -63,8 +67,8 @@
</woot-button>
</div>
</div>
<div class="medium-12 columns">
<div class="modal-footer justify-content-end w-full">
<div class="w-full">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button class="button clear" @click.prevent="onClose">
{{ $t('CONTACTS_FILTER.CANCEL_BUTTON_LABEL') }}
</woot-button>
@@ -349,17 +353,8 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.filters-wrap {
padding: var(--space-normal);
border-radius: var(--border-radius-large);
border: 1px solid var(--color-border);
background: var(--color-background-light);
margin-bottom: var(--space-normal);
}
.filter-actions {
margin-top: var(--space-normal);
.folder-input {
@apply w-[50%];
}
</style>
@@ -1,5 +1,7 @@
<template>
<section class="contacts-table-wrap">
<section
class="contacts-table-wrap bg-white dark:bg-slate-900 flex-1 h-full overflow-hidden"
>
<ve-table
:fixed-header="true"
max-height="calc(100vh - 7.125rem)"
@@ -18,7 +20,7 @@
v-else-if="!isLoading && !contacts.length"
:title="$t('CONTACTS_PAGE.LIST.NO_CONTACTS')"
/>
<div v-if="isLoading" class="contacts--loader">
<div v-if="isLoading" class="items-center flex text-base justify-center">
<spinner />
<span>{{ $t('CONTACTS_PAGE.LIST.LOADING_MESSAGE') }}</span>
</div>
@@ -133,7 +135,7 @@ export default {
status={row.availability_status}
/>
<div class="user-block">
<h6 class="sub-block-title text-truncate">
<h6 class="sub-block-title overflow-hidden whitespace-nowrap text-ellipsis">
<router-link
to={`/app/accounts/${this.$route.params.accountId}/contacts/${row.id}`}
class="user-name"
@@ -159,7 +161,7 @@ export default {
renderBodyCell: ({ row }) => {
if (row.email)
return (
<div class="text-truncate">
<div class="overflow-hidden whitespace-nowrap text-ellipsis text-woot-500 dark:text-woot-500">
<a
target="_blank"
rel="noopener noreferrer nofollow"
@@ -202,7 +204,7 @@ export default {
renderBodyCell: ({ row }) => {
if (row.country) {
return (
<div class="text-truncate">
<div class="overflow-hidden whitespace-nowrap text-ellipsis">
{`${getCountryFlag(row.countryCode)} ${row.country}`}
</div>
);
@@ -284,43 +286,27 @@ export default {
</script>
<style lang="scss" scoped>
@import '~dashboard/assets/scss/mixins';
.contacts-table-wrap {
flex: 1 1;
height: 100%;
overflow: hidden;
}
.contacts-table-wrap::v-deep {
.ve-table {
padding-bottom: var(--space-large);
@apply pb-8;
}
.row--user-block {
align-items: center;
display: flex;
text-align: left;
@apply items-center flex text-left;
.user-block {
align-items: flex-start;
display: flex;
flex-direction: column;
margin: 0 var(--space-small);
@apply items-start flex flex-col my-0 mx-2;
}
.user-name {
font-size: var(--font-size-small);
font-weight: var(--font-weight-medium);
margin: 0;
text-transform: capitalize;
@apply text-sm font-medium m-0 capitalize;
}
.view-details--button {
color: var(--color-body);
@apply text-slate-600 dark:text-slate-200;
}
.user-email {
margin: 0;
@apply m-0;
}
}
@@ -336,25 +322,13 @@ export default {
font-size: var(--font-size-mini) !important;
}
.ve-table-sort {
top: -4px;
@apply -top-1;
}
}
.contacts--loader {
align-items: center;
display: flex;
font-size: var(--font-size-default);
justify-content: center;
padding: var(--space-big);
}
.cell--social-profiles {
a {
color: var(--s-300);
display: inline-block;
font-size: var(--font-size-medium);
min-width: var(--space-large);
text-align: center;
@apply text-slate-300 dark:text-slate-400 text-lg min-w-[2rem] text-center;
}
}
</style>
@@ -1,6 +1,6 @@
<template>
<div class="contacts-page row">
<div class="left-wrap" :class="wrapClass">
<div class="w-full flex flex-row">
<div class="flex flex-col h-full" :class="wrapClass">
<contacts-header
:search-query="searchQuery"
:header-title="pageTitle"
@@ -187,7 +187,7 @@ export default {
return this.selectedContactId !== '';
},
wrapClass() {
return this.showContactViewPane ? 'medium-9' : 'medium-12';
return this.showContactViewPane ? 'w-[75%]' : 'w-full';
},
pageParameter() {
const selectedPageNumber = Number(this.$route.query?.page);
@@ -458,15 +458,3 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.contacts-page {
width: 100%;
}
.left-wrap {
display: flex;
flex-direction: column;
height: 100%;
}
</style>
@@ -1,21 +1,30 @@
<template>
<header class="header">
<div class="table-actions-wrap">
<div class="left-aligned-wrap">
<header
class="bg-white dark:bg-slate-900 border-b border-slate-50 dark:border-slate-800"
>
<div class="flex justify-between w-full py-2 px-4">
<div class="flex items-center justify-center max-w-full min-w-[6.25rem]">
<woot-sidemenu-icon />
<h1 class="page-title header-title">
<h1
class="m-0 text-2xl text-slate-900 dark:text-slate-100 overflow-hidden whitespace-nowrap text-ellipsis my-0 mx-2"
>
{{ headerTitle }}
</h1>
</div>
<div class="right-aligned-wrap">
<div class="search-wrap">
<div class="search-icon-container">
<fluent-icon icon="search" class="search-icon" />
<div class="flex gap-2">
<div
class="max-w-[400px] min-w-[150px] flex items-center relative mx-2 search-wrap"
>
<div class="flex items-center absolute h-full left-2.5">
<fluent-icon
icon="search"
class="h-5 leading-9 text-sm text-slate-700 dark:text-slate-200"
/>
</div>
<input
type="text"
:placeholder="$t('CONTACTS_PAGE.SEARCH_INPUT_PLACEHOLDER')"
class="contact-search"
class="contact-search border-slate-100 dark:border-slate-600"
:value="searchQuery"
@keyup.enter="submitSearch"
@input="inputSearch"
@@ -29,9 +38,9 @@
{{ $t('CONTACTS_PAGE.SEARCH_BUTTON') }}
</woot-button>
</div>
<div v-if="hasActiveSegments">
<div v-if="hasActiveSegments" class="flex gap-2">
<woot-button
class="margin-right-1 clear"
class="clear"
color-scheme="secondary"
icon="edit"
@click="onToggleEditSegmentsModal"
@@ -39,7 +48,7 @@
{{ $t('CONTACTS_PAGE.FILTER_CONTACTS_EDIT') }}
</woot-button>
<woot-button
class="margin-right-1 clear"
class="clear"
color-scheme="alert"
icon="delete"
@click="onToggleDeleteSegmentsModal"
@@ -47,10 +56,13 @@
{{ $t('CONTACTS_PAGE.FILTER_CONTACTS_DELETE') }}
</woot-button>
</div>
<div v-if="!hasActiveSegments" class="filters__button-wrap">
<div v-if="hasAppliedFilters" class="filters__applied-indicator" />
<div v-if="!hasActiveSegments" class="relative">
<div
v-if="hasAppliedFilters"
class="absolute h-2 w-2 top-1 right-3 bg-slate-500 dark:bg-slate-500 rounded-full"
/>
<woot-button
class="margin-right-1 clear"
class="clear"
color-scheme="secondary"
data-testid="create-new-contact"
icon="filter"
@@ -62,7 +74,7 @@
<woot-button
v-if="hasAppliedFilters && !hasActiveSegments"
class="margin-right-1 clear"
class="clear"
color-scheme="alert"
variant="clear"
icon="save"
@@ -71,7 +83,7 @@
{{ $t('CONTACTS_PAGE.FILTER_CONTACTS_SAVE') }}
</woot-button>
<woot-button
class="margin-right-1 clear"
class="clear"
color-scheme="success"
icon="person-add"
data-testid="create-new-contact"
@@ -177,98 +189,18 @@ export default {
</script>
<style lang="scss" scoped>
.page-title {
margin: 0;
}
.table-actions-wrap {
display: flex;
justify-content: space-between;
width: 100%;
padding: var(--space-small) var(--space-normal) var(--space-small)
var(--space-normal);
}
.left-aligned-wrap {
display: flex;
align-items: center;
justify-content: center;
max-width: 100%;
min-width: var(--space-mega);
.header-title {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
margin: 0 var(--space-small);
}
}
.right-aligned-wrap {
display: flex;
}
.search-wrap {
max-width: 400px;
min-width: 150px;
display: flex;
align-items: center;
position: relative;
margin-right: var(--space-small);
margin-left: var(--space-small);
.search-icon-container {
display: flex;
align-items: center;
position: absolute;
height: 100%;
left: var(--space-one);
.search-icon {
height: var(--font-size-medium);
line-height: 2.25rem;
font-size: var(--font-size-small);
color: var(--b-700);
}
}
.contact-search {
margin: 0;
height: 2.375rem;
width: 100%;
font-size: var(--font-size-small);
padding-left: calc(var(--space-large) + var(--space-smaller));
padding-right: 3.75rem;
border-color: var(--s-100);
@apply pl-9 pr-[3.75rem] text-sm w-full h-[2.375rem] m-0;
}
.button {
margin-left: var(--space-small);
height: 2rem;
right: var(--space-smaller);
position: absolute;
padding: 0 var(--space-small);
transition: transform 100ms linear;
opacity: 0;
transform: translateX(-1px);
visibility: hidden;
@apply ml-2 h-8 right-1 absolute py-0 px-2 opacity-0 -translate-x-px invisible;
}
.button.show {
opacity: 1;
transform: translateX(0);
visibility: visible;
}
}
.filters__button-wrap {
position: relative;
.filters__applied-indicator {
position: absolute;
height: var(--space-small);
width: var(--space-small);
top: var(--space-smaller);
right: var(--space-slab);
background-color: var(--s-500);
border-radius: var(--border-radius-rounded);
@apply opacity-100 translate-x-0 visible;
}
}
</style>
@@ -1,6 +1,6 @@
<template>
<modal :show.sync="show" :on-close="onClose">
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header :header-title="$t('IMPORT_CONTACTS.TITLE')">
<p>
{{ $t('IMPORT_CONTACTS.DESC') }}
@@ -9,8 +9,8 @@
}}</a>
</p>
</woot-modal-header>
<div class="row modal-content">
<div class="medium-12 columns">
<div class="flex flex-col p-8">
<div class="w-full">
<label>
<span>{{ $t('IMPORT_CONTACTS.FORM.LABEL') }}</span>
<input
@@ -22,8 +22,8 @@
/>
</label>
</div>
<div class="modal-footer">
<div class="medium-12 columns">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<div class="w-full">
<woot-button
:disabled="uiFlags.isCreating || !file"
:loading="uiFlags.isCreating"
@@ -71,14 +71,13 @@ export default {
<style lang="scss" scoped>
.no-label-message {
margin-bottom: var(--space-normal);
color: var(--b-500);
@apply text-slate-500 dark:text-slate-400 mb-4;
}
::v-deep .conversation {
padding-right: 0;
@apply pr-0;
.conversation--details {
padding-left: var(--space-small);
@apply pl-2;
}
}
</style>
@@ -1,12 +1,12 @@
<template>
<div class="conv-details--item" :class="{ compact: compact }">
<h4 class="conv-details--item__label text-block-title">
<span class="item__title">
<div class="overflow-auto" :class="compact ? 'py-0 px-0' : 'py-3 px-4'">
<div class="items-center flex justify-between mb-1.5">
<span class="text-slate-800 font-medium dark:text-slate-100 text-sm">
{{ title }}
</span>
<slot name="button" />
</h4>
<div v-if="value" class="conv-details--item__value">
</div>
<div v-if="value" class="break-words">
<slot>
{{ value }}
</slot>
@@ -25,28 +25,3 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.conv-details--item {
overflow: auto;
padding: var(--space-slab) var(--space-normal);
&.compact {
padding: 0;
}
.conv-details--item__label {
align-items: center;
display: flex;
justify-content: space-between;
.edit-button {
padding: 0;
}
}
.conv-details--item__value {
word-break: break-all;
}
}
</style>
@@ -1,6 +1,6 @@
<template>
<div
class="medium-3 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-300 contact--panel"
class="bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-300 border-slate-50 dark:border-slate-800/50 border-l rtl:border-l-0 rtl:border-r contact--panel overflow-y-auto"
>
<contact-info
:contact="contact"
@@ -21,7 +21,7 @@
<div
v-for="element in conversationSidebarItems"
:key="element.name"
class="list-group-item"
class="bg-white dark:bg-gray-800"
>
<div
v-if="element.name === 'conversation_actions'"
@@ -257,72 +257,19 @@ export default {
</script>
<style lang="scss" scoped>
@import '~dashboard/assets/scss/variables';
.contact--panel {
border-left: 1px solid var(--color-border);
font-size: $font-size-small;
overflow-y: auto;
overflow: auto;
position: relative;
i {
margin-right: $space-smaller;
}
}
.list-group {
.list-group-item {
background-color: var(--white);
}
}
::v-deep {
.contact--profile {
padding-bottom: var(--space-slab);
border-bottom: 1px solid var(--color-border);
@apply pb-3 border-b border-solid border-slate-75 dark:border-slate-700;
}
.conversation--actions .multiselect-wrap--small {
.multiselect {
padding-left: var(--space-medium);
box-sizing: border-box;
@apply box-border pl-6;
}
.multiselect__element {
span {
width: 100%;
@apply w-full;
}
}
}
}
.conversation--labels {
padding: $space-medium;
.icon {
margin-right: $space-micro;
font-size: $font-size-micro;
color: #fff;
}
.label {
color: #fff;
padding: 0.125rem;
}
}
.contact--mute {
color: $alert-color;
display: block;
text-align: left;
}
.contact--actions {
display: flex;
flex-direction: column;
justify-content: center;
}
.contact-info {
margin-top: var(--space-two);
}
</style>
@@ -1,5 +1,5 @@
<template>
<div>
<div class="bg-white dark:bg-slate-900">
<div class="multiselect-wrap--small">
<contact-details-item
compact
@@ -145,10 +145,10 @@ export default {
</script>
<style scoped lang="scss">
.conversation--attribute {
border-bottom: 1px solid var(--color-border-light);
@apply border-slate-50 dark:border-slate-700 border-b border-solid;
&:nth-child(2n) {
background: var(--s-25);
@apply bg-slate-25 dark:bg-slate-800;
}
}
</style>
@@ -1,13 +1,13 @@
<template>
<div class="watchers-wrap">
<div class="watchers--collapsed">
<div class="content-wrap">
<div class="relative bg-white dark:bg-slate-900">
<div class="flex justify-between">
<div class="flex justify-between w-full mb-1">
<div>
<p v-if="watchersList.length" class="total-watchers message-text">
<p v-if="watchersList.length" class="total-watchers m-0 text-sm">
<spinner v-if="watchersUiFlas.isFetching" size="tiny" />
{{ totalWatchersText }}
</p>
<p v-else class="text-muted message-text">
<p v-else class="text-muted m-0 text-sm">
{{ $t('CONVERSATION_PARTICIPANTS.NO_PARTICIPANTS_TEXT') }}
</p>
</div>
@@ -22,13 +22,16 @@
/>
</div>
</div>
<div class="actions">
<div class="flex justify-between items-center">
<thumbnail-group
:more-thumbnails-text="moreThumbnailsText"
:show-more-thumbnails-count="showMoreThumbs"
:users-list="thumbnailList"
/>
<p v-if="isUserWatching" class="text-muted message-text">
<p
v-if="isUserWatching"
class="text-slate-300 dark:text-slate-300 m-0 text-sm"
>
{{ $t('CONVERSATION_PARTICIPANTS.YOU_ARE_WATCHING') }}
</p>
<woot-button
@@ -50,8 +53,10 @@
:class="{ 'dropdown-pane--open': showDropDown }"
class="dropdown-pane"
>
<div class="dropdown__header">
<h4 class="text-block-title text-truncate">
<div class="flex justify-between items-center mb-1">
<h4
class="text-sm m-0 overflow-hidden whitespace-nowrap text-ellipsis text-slate-800 dark:text-slate-100"
>
{{ $t('CONVERSATION_PARTICIPANTS.ADD_PARTICIPANTS') }}
</h4>
<woot-button
@@ -225,46 +230,7 @@ export default {
};
</script>
<style lang="scss" scoped>
.watchers-wrap {
position: relative;
}
.content-wrap {
display: flex;
justify-content: space-between;
width: 100%;
margin-bottom: var(--space-smaller);
}
.watchers--collapsed {
display: flex;
justify-content: space-between;
}
.dropdown-pane {
box-sizing: border-box;
top: var(--space-large);
width: 100%;
}
.dropdown__header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: var(--space-smaller);
.text-block-title {
margin: 0;
}
}
.actions {
display: flex;
justify-content: space-between;
align-items: center;
}
.message-text {
margin: 0;
font-size: var(--font-size-small);
@apply box-border top-8 w-full;
}
</style>
@@ -1,6 +1,8 @@
<template>
<div class="macro button secondary clear ">
<span class="text-truncate">{{ macro.name }}</span>
<span class="overflow-hidden whitespace-nowrap text-ellipsis">{{
macro.name
}}</span>
<div class="macros-actions">
<woot-button
v-tooltip.left-start="$t('MACROS.EXECUTE.PREVIEW')"
@@ -86,16 +88,10 @@ export default {
<style scoped lang="scss">
.macro {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
line-height: var(--space-normal);
@apply relative flex items-center justify-between leading-4;
.macros-actions {
display: flex;
align-items: center;
justify-content: flex-end;
@apply flex items-center justify-end;
}
}
</style>
@@ -1,11 +1,26 @@
<template>
<div class="macro-preview">
<h6 class="text-block-title macro-title">{{ macro.name }}</h6>
<div v-for="(action, i) in resolvedMacro" :key="i" class="macro-block">
<div v-if="i !== macro.actions.length - 1" class="macro-block-border" />
<div class="macro-block-dot" />
<p class="macro-action-name">{{ action.actionName }}</p>
<p class="macro-action-params">{{ action.actionValue }}</p>
<div
class="macro-preview absolute max-h-[22.5rem] w-64 rounded-md bg-white dark:bg-slate-800 shadow-lg bottom-8 right-8 overflow-y-auto p-4 text-left rtl:text-right"
>
<h6 class="text-sm text-slate-800 dark:text-slate-100 mb-4">
{{ macro.name }}
</h6>
<div
v-for="(action, i) in resolvedMacro"
:key="i"
class="relative pl-4 macro-block"
>
<div
v-if="i !== macro.actions.length - 1"
class="top-[0.390625rem] absolute -bottom-1 left-0 w-px bg-slate-75 dark:bg-slate-600"
/>
<div
class="absolute -left-[0.21875rem] top-[0.2734375rem] w-2 h-2 rounded-full bg-white dark:bg-slate-200 border-2 border-solid border-slate-100 dark:border-slate-600"
/>
<p class="text-xs text-slate-500 dark:text-slate-400 mb-1">
{{ action.actionName }}
</p>
<p class="text-slate-800 dark:text-slate-100">{{ action.actionValue }}</p>
</div>
</div>
</template>
@@ -68,55 +83,10 @@ export default {
<style lang="scss" scoped>
.macro-preview {
position: absolute;
max-height: 22.5rem;
min-height: var(--space-jumbo);
width: 17rem;
border-radius: var(--border-radius-normal);
background-color: var(--white);
box-shadow: var(--shadow-dropdown-pane);
bottom: var(--space-large);
right: var(--space-large);
overflow-y: auto;
padding: var(--space-normal);
text-align: left;
.macro-title {
margin-bottom: var(--space-normal);
}
.macro-block {
position: relative;
padding-left: var(--space-normal);
&:not(:last-child) {
padding-bottom: var(--space-small);
@apply pb-2;
}
.macro-block-border {
top: 0.390625rem;
position: absolute;
bottom: var(--space-minus-smaller);
left: 0;
width: 1px;
background-color: var(--s-75);
}
.macro-block-dot {
position: absolute;
left: -0.21875rem;
height: var(--space-small);
width: var(--space-small);
border: 2px solid var(--s-100);
background-color: var(--white);
border-radius: var(--border-radius-full);
top: 0.2734375rem;
}
}
.macro-action-name {
font-size: var(--font-size-mini);
color: var(--s-500);
margin-bottom: var(--space-smaller);
}
}
</style>
@@ -1,7 +1,10 @@
<template>
<form class="contact--form" @submit.prevent="handleSubmit">
<div class="row">
<div class="columns">
<form
class="contact--form w-full pt-6 px-8 pb-8"
@submit.prevent="handleSubmit"
>
<div>
<div class="w-full">
<woot-avatar-uploader
:label="$t('CONTACT_FORM.FORM.AVATAR.LABEL')"
:src="avatarUrl"
@@ -13,8 +16,8 @@
/>
</div>
</div>
<div class="row">
<div class="columns">
<div>
<div class="w-full">
<label :class="{ error: $v.name.$error }">
{{ $t('CONTACT_FORM.FORM.NAME.LABEL') }}
<input
@@ -39,7 +42,7 @@
</label>
</div>
</div>
<div class="medium-12 columns">
<div class="w-full">
<label :class="{ error: $v.description.$error }">
{{ $t('CONTACT_FORM.FORM.BIO.LABEL') }}
<textarea
@@ -50,8 +53,8 @@
/>
</label>
</div>
<div class="row">
<div class="medium-12 columns">
<div>
<div class="w-full">
<label
:class="{
error: isPhoneNumberNotValid,
@@ -73,7 +76,7 @@
</label>
<div
v-if="isPhoneNumberNotValid || !phoneNumber"
class="callout small warning"
class="callout small warning text-sm dark:bg-yellow-200/20 dark:text-yellow-400"
>
{{ $t('CONTACT_FORM.FORM.PHONE_NUMBER.HELP') }}
</div>
@@ -81,12 +84,12 @@
</div>
<woot-input
v-model.trim="companyName"
class="columns"
class="w-full"
:label="$t('CONTACT_FORM.FORM.COMPANY_NAME.LABEL')"
:placeholder="$t('CONTACT_FORM.FORM.COMPANY_NAME.PLACEHOLDER')"
/>
<div class="row">
<div class="medium-12 columns">
<div>
<div class="w-full">
<label>
{{ $t('CONTACT_FORM.FORM.COUNTRY.LABEL') }}
</label>
@@ -108,12 +111,12 @@
</div>
<woot-input
v-model="city"
class="columns"
class="w-full"
:label="$t('CONTACT_FORM.FORM.CITY.LABEL')"
:placeholder="$t('CONTACT_FORM.FORM.CITY.PLACEHOLDER')"
/>
<div class="medium-12 columns">
<div class="w-full">
<label>
Social Profiles
</label>
@@ -130,8 +133,8 @@
/>
</div>
</div>
<div class="modal-footer">
<div class="medium-12 columns">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<div class="w-full">
<woot-submit-button
:loading="inProgress"
:button-text="$t('CONTACT_FORM.FORM.SUBMIT')"
@@ -415,21 +418,13 @@ export default {
</script>
<style scoped lang="scss">
.contact--form {
padding: var(--space-normal) var(--space-large) var(--space-large);
.columns {
padding: 0 var(--space-smaller);
}
}
.input-group-label {
font-size: var(--font-size-small);
@apply text-sm bg-slate-50 dark:bg-slate-700 text-slate-800 dark:text-slate-100 border-slate-200 dark:border-slate-600;
}
::v-deep {
.multiselect .multiselect__tags .multiselect__single {
padding-left: 0;
@apply pl-0;
}
}
</style>
@@ -1,7 +1,7 @@
<template>
<div class="contact--profile">
<div class="contact--info">
<div class="contact-info--header">
<div class="relative items-center p-4 bg-white dark:bg-slate-900">
<div class="text-left rtl:text-right">
<div class="flex justify-between flex-row">
<thumbnail
v-if="showAvatar"
:src="contact.thumbnail"
@@ -12,14 +12,16 @@
<woot-button
v-if="showCloseButton"
:icon="closeIconName"
class="clear secondary close-button--rtl"
class="clear secondary rtl:rotate-180"
@click="onPanelToggle"
/>
</div>
<div class="contact--details">
<div v-if="showAvatar" class="contact--name-wrap">
<h3 class="sub-block-title contact--name">
<div class="mt-2 w-full">
<div v-if="showAvatar" class="flex items-center mb-2 gap-1">
<h3
class="text-base text-slate-800 dark:text-slate-100 capitalize whitespace-normal my-0"
>
{{ contact.name }}
</h3>
<fluent-icon
@@ -31,6 +33,7 @@
"
icon="info"
size="14"
class="mt-0.5"
/>
<a
:href="contactProfileLink"
@@ -47,11 +50,11 @@
</a>
</div>
<p v-if="additionalAttributes.description" class="contact--bio">
<p v-if="additionalAttributes.description" class="break-words">
{{ additionalAttributes.description }}
</p>
<social-icons :social-profiles="socialProfiles" />
<div class="contact--metadata">
<div class="mb-3">
<contact-info-row
:href="contact.email ? `mailto:${contact.email}` : ''"
:value="contact.email"
@@ -90,11 +93,11 @@
/>
</div>
</div>
<div class="contact-actions">
<div class="flex items-center w-full mt-2 gap-2">
<woot-button
v-tooltip="$t('CONTACT_PANEL.NEW_MESSAGE')"
title="$t('CONTACT_PANEL.NEW_MESSAGE')"
class="new-message"
class="mr-2 rtl:ml-2 rtl:mr-0"
icon="chat"
size="small"
@click="toggleConversationModal"
@@ -102,7 +105,7 @@
<woot-button
v-tooltip="$t('EDIT_CONTACT.BUTTON_LABEL')"
title="$t('EDIT_CONTACT.BUTTON_LABEL')"
class="edit-contact"
class="mr-2 rtl:ml-2 rtl:mr-0"
icon="edit"
variant="smooth"
size="small"
@@ -111,7 +114,7 @@
<woot-button
v-tooltip="$t('CONTACT_PANEL.MERGE_CONTACT')"
title="$t('CONTACT_PANEL.MERGE_CONTACT')"
class="merge-contact"
class="mr-2 rtl:ml-2 rtl:mr-0"
icon="merge"
variant="smooth"
size="small"
@@ -123,7 +126,7 @@
v-if="isAdmin"
v-tooltip="$t('DELETE_CONTACT.BUTTON_LABEL')"
title="$t('DELETE_CONTACT.BUTTON_LABEL')"
class="delete-contact"
class="mr-2 rtl:ml-2 rtl:mr-0"
icon="delete"
variant="smooth"
size="small"
@@ -308,76 +311,3 @@ export default {
},
};
</script>
<style scoped lang="scss">
.contact--profile {
position: relative;
align-items: flex-start;
padding: var(--space-normal);
}
.contact--details {
margin-top: var(--space-small);
width: 100%;
}
.contact--info {
text-align: left;
}
.contact-info--header {
display: flex;
justify-content: space-between;
flex-direction: row;
}
.contact--name-wrap {
display: flex;
align-items: center;
margin-bottom: var(--space-small);
}
.contact--name {
text-transform: capitalize;
white-space: normal;
margin: 0 var(--space-smaller) 0 var(--space-smaller);
a {
color: var(--color-body);
}
}
.contact--metadata {
margin-bottom: var(--space-slab);
}
.contact-actions {
margin-top: var(--space-small);
}
.contact-actions {
display: flex;
align-items: center;
width: 100%;
.new-message,
.edit-contact,
.merge-contact,
.delete-contact {
margin-right: var(--space-small);
}
}
.merge-summary--card {
padding: var(--space-normal);
}
.contact--bio {
word-wrap: break-word;
}
.button--contact-menu {
position: absolute;
right: var(--space-normal);
top: 0;
}
</style>
@@ -1,9 +1,24 @@
<template>
<div class="contact-info--row">
<a v-if="href" :href="href" class="contact-info--details">
<emoji-or-icon :icon="icon" :emoji="emoji" icon-size="14" />
<span v-if="value" class="text-truncate" :title="value">{{ value }}</span>
<span v-else class="text-muted">{{
<div class="-ml-1">
<a
v-if="href"
:href="href"
class="flex items-center mb-2 text-slate-800 dark:text-slate-100 hover:underline"
>
<emoji-or-icon
:icon="icon"
:emoji="emoji"
icon-size="14"
class="mr-2 ml-1 rtl:mr-1 rtl:ml-2"
/>
<span
v-if="value"
class="overflow-hidden whitespace-nowrap text-ellipsis text-sm"
:title="value"
>
{{ value }}
</span>
<span v-else class="text-slate-300 dark:text-slate-600 text-sm">{{
$t('CONTACT_PANEL.NOT_AVAILABLE')
}}</span>
@@ -14,15 +29,28 @@
size="tiny"
color-scheme="secondary"
icon="clipboard"
class-names="copy-icon"
class-names="copy-button"
@click="onCopy"
/>
</a>
<div v-else class="contact-info--details">
<emoji-or-icon :icon="icon" :emoji="emoji" icon-size="14" />
<span v-if="value" class="text-truncate">{{ value }}</span>
<span v-else class="text-muted">{{
<div
v-else
class="flex items-center mb-2 text-slate-800 dark:text-slate-100"
>
<emoji-or-icon
:icon="icon"
:emoji="emoji"
icon-size="14"
class="mr-2 ml-1 rtl:mr-1 rtl:ml-2"
/>
<span
v-if="value"
class="overflow-hidden whitespace-nowrap text-ellipsis text-sm"
>
{{ value }}
</span>
<span v-else class="text-slate-300 dark:text-slate-600 text-sm">{{
$t('CONTACT_PANEL.NOT_AVAILABLE')
}}</span>
</div>
@@ -69,36 +97,8 @@ export default {
},
};
</script>
<style scoped lang="scss">
.contact-info--row {
margin-left: var(--space-minus-smaller);
.contact-info--icon {
font-size: var(--font-size-default);
min-width: var(--space-medium);
}
}
.contact-info--details {
display: flex;
align-items: center;
margin-bottom: var(--space-small);
color: var(--color-body);
.copy-icon {
margin-left: var(--space-smaller);
}
&.a {
&:hover {
text-decoration: underline;
}
}
}
.contact-info--details .icon--emoji,
.contact-info--details .icon--font {
display: inline-block;
width: var(--space-medium);
<style scoped>
.copy-button {
@apply ml-1 rtl:ml-0 rtl:mr-1;
}
</style>
@@ -1,13 +1,13 @@
<template>
<form class="conversation--form" @submit.prevent="onFormSubmit">
<form class="conversation--form w-full" @submit.prevent="onFormSubmit">
<div v-if="showNoInboxAlert" class="callout warning">
<p>
{{ $t('NEW_CONVERSATION.NO_INBOX') }}
</p>
</div>
<div v-else>
<div class="row gutter-small">
<div class="columns">
<div class="gap-2 flex flex-row">
<div class="w-[50%]">
<label>
{{ $t('NEW_CONVERSATION.FORM.INBOX.LABEL') }}
</label>
@@ -50,25 +50,29 @@
</span>
</label>
</div>
<div class="columns">
<div class="w-[50%]">
<label>
{{ $t('NEW_CONVERSATION.FORM.TO.LABEL') }}
<div class="contact-input">
<div
class="flex items-center h-[2.4735rem] rounded-sm py-1 px-2 bg-slate-25 dark:bg-slate-900 border border-solid border-slate-75 dark:border-slate-600"
>
<thumbnail
:src="contact.thumbnail"
size="24px"
:username="contact.name"
:status="contact.availability_status"
/>
<h4 class="text-block-title contact-name">
<h4
class="m-0 ml-2 mr-2 text-slate-700 dark:text-slate-100 text-sm"
>
{{ contact.name }}
</h4>
</div>
</label>
</div>
</div>
<div v-if="isAnEmailInbox" class="row">
<div class="columns">
<div v-if="isAnEmailInbox" class="w-full">
<div class="w-full">
<label :class="{ error: $v.subject.$error }">
{{ $t('NEW_CONVERSATION.FORM.SUBJECT.LABEL') }}
<input
@@ -83,9 +87,9 @@
</label>
</div>
</div>
<div class="row">
<div class="columns">
<div class="canned-response">
<div class="w-full">
<div class="w-full">
<div class="relative">
<canned-response
v-if="showCannedResponseMenu && hasSlashCommand"
:search-key="cannedResponseSearchKey"
@@ -126,7 +130,7 @@
{{ $t('NEW_CONVERSATION.FORM.MESSAGE.LABEL') }}
<textarea
v-model="message"
class="message-input"
class="min-h-[5rem]"
type="text"
:placeholder="$t('NEW_CONVERSATION.FORM.MESSAGE.PLACEHOLDER')"
@input="$v.message.$touch"
@@ -138,7 +142,10 @@
</div>
</div>
</div>
<div v-if="!hasWhatsappTemplates" class="modal-footer">
<div
v-if="!hasWhatsappTemplates"
class="flex flex-row justify-end gap-2 py-2 px-0 w-full"
>
<button class="button clear" @click.prevent="onCancel">
{{ $t('NEW_CONVERSATION.FORM.CANCEL') }}
</button>
@@ -367,58 +374,30 @@ export default {
<style scoped lang="scss">
.conversation--form {
padding: var(--space-normal) var(--space-large) var(--space-large);
@apply pt-4 px-8 pb-8;
}
.canned-response {
position: relative;
}
.message-editor {
@apply px-3;
.input-group-label {
font-size: var(--font-size-small);
}
.contact-input {
display: flex;
align-items: center;
height: 2.4735rem;
background: var(--color-background-light);
border: 1px solid var(--color-border);
padding: var(--space-smaller) var(--space-small);
border-radius: var(--border-radius-small);
.contact-name {
margin: 0;
margin-left: var(--space-small);
margin-right: var(--space-small);
::v-deep {
.ProseMirror-menubar {
@apply rounded-tl-[4px];
}
}
}
.message-input {
min-height: 5rem;
}
.row.gutter-small {
gap: var(--space-small);
}
::v-deep {
.mention--box {
left: 0;
margin: auto;
right: 0;
top: unset;
height: fit-content;
@apply left-0 m-auto right-0 top-auto h-fit;
}
/* TODO: Remove when have standardized a component out of multiselect */
.multiselect .multiselect__content .multiselect__option span {
display: inline-flex;
width: var(--space-medium);
color: var(--s-600);
@apply inline-flex w-6 text-slate-600 dark:text-slate-400;
}
.multiselect .multiselect__content .multiselect__option {
padding: var(--space-micro) var(--space-smaller);
@apply py-0.5 px-1;
}
}
</style>
@@ -1,6 +1,6 @@
<template>
<woot-modal :show.sync="show" :on-close="onCancel" modal-type="right-aligned">
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header
:header-title="$t('CREATE_CONTACT.TITLE')"
:header-content="$t('CREATE_CONTACT.DESC')"
@@ -1,6 +1,6 @@
<template>
<woot-modal :show.sync="show" :on-close="onCancel" modal-type="right-aligned">
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header
:header-title="
`${$t('EDIT_CONTACT.TITLE')} - ${contact.name || contact.email}`
@@ -1,6 +1,6 @@
<template>
<woot-modal :show.sync="show" :on-close="onCancel">
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header
:header-title="$t('NEW_CONVERSATION.TITLE')"
:header-content="$t('NEW_CONVERSATION.DESC')"
@@ -1,5 +1,5 @@
<template>
<div class="row">
<div class="mx-0 flex flex-wrap">
<templates-picker
v-if="!selectedWaTemplate"
:inbox-id="inboxId"
@@ -1,9 +1,11 @@
<template>
<div class="dropdown-search-wrap">
<h4 class="text-block-title">
<div class="flex flex-col w-full max-h-[12.5rem]">
<h4
class="text-sm text-slate-800 dark:text-slate-100 mb-1 overflow-hidden whitespace-nowrap text-ellipsis flex-grow"
>
{{ $t('CUSTOM_ATTRIBUTES.FORM.ATTRIBUTE_SELECT.TITLE') }}
</h4>
<div class="search-wrap">
<div class="mb-2 flex-shrink-0 flex-grow-0 flex-auto max-h-8">
<input
ref="searchbar"
v-model="search"
@@ -13,8 +15,10 @@
:placeholder="$t('CUSTOM_ATTRIBUTES.FORM.ATTRIBUTE_SELECT.PLACEHOLDER')"
/>
</div>
<div class="list-wrap">
<div class="list">
<div
class="flex justify-start items-start flex-grow flex-shrink flex-auto overflow-auto h-32"
>
<div class="w-full h-full">
<woot-dropdown-menu>
<custom-attribute-drop-down-item
v-for="attribute in filteredAttributes"
@@ -23,11 +27,14 @@
@click="onAddAttribute(attribute)"
/>
</woot-dropdown-menu>
<div v-if="noResult" class="no-result">
<div
v-if="noResult"
class="w-full justify-center items-center flex mb-2 h-[70%] text-slate-500 dark:text-slate-300 py-2 px-2.5 overflow-hidden whitespace-nowrap text-ellipsis text-sm"
>
{{ $t('CUSTOM_ATTRIBUTES.FORM.ATTRIBUTE_SELECT.NO_RESULT') }}
</div>
<woot-button
class="add"
class="float-right"
icon="add"
size="tiny"
@click="addNewAttribute"
@@ -101,54 +108,7 @@ export default {
</script>
<style lang="scss" scoped>
.dropdown-search-wrap {
display: flex;
flex-direction: column;
width: 100%;
max-height: 12.5rem;
.search-wrap {
margin-bottom: var(--space-small);
flex: 0 0 auto;
max-height: var(--space-large);
.search-input {
margin: 0;
width: 100%;
border: 1px solid transparent;
height: var(--space-large);
font-size: var(--font-size-small);
padding: var(--space-small);
background-color: var(--color-background);
}
input:focus {
border: 1px solid var(--w-500);
}
}
.list-wrap {
display: flex;
justify-content: flex-start;
align-items: flex-start;
flex: 1 1 auto;
overflow: auto;
.list {
width: 100%;
.add {
float: right;
}
}
.no-result {
display: flex;
justify-content: center;
color: var(--s-700);
padding: var(--space-smaller) var(--space-one);
font-weight: var(--font-weight-medium);
font-size: var(--font-size-small);
}
}
.search-input {
@apply m-0 w-full border border-solid border-transparent h-8 text-sm text-slate-700 dark:text-slate-100 rounded-md focus:border-woot-500 bg-slate-50 dark:bg-slate-900;
}
</style>
@@ -97,13 +97,13 @@ export default {
<style scoped lang="scss">
.custom-attributes--panel {
.conversation--attribute {
border-bottom: 1px solid var(--color-border-light);
@apply border-slate-50 dark:border-slate-700 border-b border-solid;
}
&.odd {
.conversation--attribute {
&:nth-child(2n + 1) {
background: var(--s-25);
@apply bg-slate-25 dark:bg-slate-800;
}
}
}
@@ -111,7 +111,7 @@ export default {
&.even {
.conversation--attribute {
&:nth-child(2n) {
background: var(--s-25);
@apply bg-slate-25 dark:bg-slate-800;
}
}
}
@@ -1,12 +1,24 @@
<template>
<div class="search-wrap">
<div class="search" :class="{ 'is-active': showSearchBox }">
<woot-sidemenu-icon />
<router-link :to="searchUrl" class="search--link">
<div class="icon">
<fluent-icon icon="search" class="search--icon" size="16" />
<div class="relative">
<div class="flex px-4 pb-1 pt-2.5 border-b border-transparent">
<woot-sidemenu-icon
size="tiny"
class="relative top-0 left-[-6px] rtl:left-0 rtl:right-[-6px]"
/>
<router-link
:to="searchUrl"
class="search-link flex-1 items-center gap-1 text-left mr-1 rtl:mr-0 rtl:ml-1 h-6 rtl:text-right rounded-md px-2 py-0 bg-slate-25 dark:bg-slate-800 inline-flex"
>
<div class="flex">
<fluent-icon
icon="search"
class="search--icon text-slate-800 dark:text-slate-200"
size="16"
/>
</div>
<p class="search--label text-ellipsis">
<p
class="search--label mb-0 overflow-hidden whitespace-nowrap text-ellipsis text-sm text-slate-800 dark:text-slate-200"
>
{{ $t('CONVERSATION.SEARCH_MESSAGES') }}
</p>
</router-link>
@@ -44,13 +56,6 @@ export default {
},
},
data() {
return {
searchTerm: '',
showSearchBox: false,
};
},
computed: {
...mapGetters({
accountId: 'getCurrentAccountId',
@@ -61,119 +66,13 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.search-wrap {
position: relative;
}
.search {
display: flex;
padding: 0;
border-bottom: 1px solid transparent;
padding: var(--space-one) var(--space-normal) var(--space-smaller)
var(--space-normal);
.search-link {
&:hover {
.search--icon,
.search--label {
color: var(--w-500);
@apply hover:text-woot-500 dark:hover:text-woot-500;
}
}
}
.search--link {
display: inline-flex;
align-items: center;
flex: 1;
background: var(--s-25);
padding: var(--space-smaller);
height: var(--space-medium);
border-radius: var(--border-radius-normal);
margin-right: var(--space-smaller);
}
.search--label {
color: var(--color-body);
margin-bottom: 0;
}
.search--input {
align-items: center;
border: 0;
color: var(--color-body);
cursor: pointer;
width: 100%;
display: flex;
font-size: var(--font-size-small);
font-weight: var(--font-weight-normal);
text-align: left;
line-height: var(--font-size-large);
}
.search--icon {
color: var(--s-600);
margin: 0 var(--space-smaller);
}
.icon {
display: flex;
}
input::placeholder {
color: var(--color-body);
font-size: var(--font-size-small);
}
.results-wrap {
position: absolute;
z-index: 9999;
box-shadow: var(--shadow-large);
background: white;
width: 100%;
max-height: 70vh;
overflow: auto;
}
.show-results {
list-style-type: none;
font-size: var(--font-size-small);
font-weight: var(--font-weight-normal);
}
.result-view {
display: flex;
justify-content: space-between;
}
.result {
padding: var(--space-smaller) var(--space-smaller) var(--space-smaller)
var(--space-normal);
color: var(--s-700);
font-size: var(--font-size-medium);
font-weight: var(--font-weight-bold);
.message-counter {
color: var(--s-500);
font-size: var(--font-size-small);
font-weight: var(--font-weight-bold);
}
}
.search--activity-message {
padding: var(--space-small) var(--space-normal) var(--space-small)
var(--space-zero);
font-size: var(--font-size-small);
font-weight: var(--font-weight-medium);
color: var(--s-500);
}
.search--activity-no-message {
display: flex;
justify-content: center;
padding: var(--space-one) var(--space-zero) var(--space-two) var(--space-zero);
font-size: var(--font-size-small);
font-weight: var(--font-weight-medium);
color: var(--s-500);
}
</style>
@@ -1,8 +1,8 @@
<template>
<woot-modal :show.sync="show" :on-close="onClose">
<woot-modal-header :header-title="$t('FILTER.CUSTOM_VIEWS.ADD.TITLE')" />
<form class="row" @submit.prevent="saveCustomViews">
<div class="medium-12 columns">
<form class="w-full" @submit.prevent="saveCustomViews">
<div class="w-full">
<woot-input
v-model="name"
:label="$t('FILTER.CUSTOM_VIEWS.ADD.LABEL')"
@@ -15,7 +15,7 @@
@blur="$v.name.$touch"
/>
<div class="modal-footer">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button :disabled="isButtonDisabled">
{{ $t('FILTER.CUSTOM_VIEWS.ADD.SAVE_BUTTON') }}
</woot-button>
@@ -4,8 +4,8 @@
:header-title="$t('HELP_CENTER.PORTAL.ADD_LOCALE.TITLE')"
:header-content="$t('HELP_CENTER.PORTAL.ADD_LOCALE.SUB_TITLE')"
/>
<form class="row" @submit.prevent="onCreate">
<div class="medium-12 columns">
<form class="w-full" @submit.prevent="onCreate">
<div class="w-full">
<label :class="{ error: $v.selectedLocale.$error }">
{{ $t('HELP_CENTER.PORTAL.ADD_LOCALE.LOCALE.LABEL') }}
<select v-model="selectedLocale">
@@ -22,8 +22,8 @@
</span>
</label>
<div class="medium-12 columns">
<div class="modal-footer justify-content-end w-full">
<div class="w-full">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button class="button clear" @click.prevent="onClose">
{{ $t('HELP_CENTER.PORTAL.ADD_LOCALE.BUTTONS.CANCEL') }}
</woot-button>
@@ -78,42 +78,21 @@ export default {
<style lang="scss" scoped>
.edit-article--container {
margin: var(--space-large) auto;
padding: 0 var(--space-medium);
max-width: 56rem;
width: 100%;
@apply my-8 mx-auto py-0 px-6 max-w-[56rem] w-full;
}
.article-heading {
font-size: var(--font-size-giga);
font-weight: var(--font-weight-bold);
width: 100%;
min-height: var(--space-jumbo);
max-height: 40rem;
height: auto;
margin-bottom: var(--space-small);
border: 0px solid transparent;
padding: 0;
color: var(--s-900);
padding: var(--space-normal);
resize: none;
&:hover {
background: var(--s-25);
border-radius: var(--border-radius-normal);
}
@apply text-[2.5rem] font-semibold w-full text-slate-900 dark:text-slate-75 p-4 hover:bg-slate-25 dark:hover:bg-slate-800 hover:rounded-md resize-none min-h-[4rem] max-h-[40rem] h-auto mb-2 border-0 border-solid border-transparent dark:border-transparent;
}
.article-content {
padding: 0 var(--space-normal);
height: fit-content;
@apply py-0 px-4 h-fit;
}
::v-deep {
.ProseMirror-menubar-wrapper {
.ProseMirror-woot-style {
min-height: var(--space-giga);
max-height: 100%;
@apply min-h-[15rem] max-h-full;
}
}
}
@@ -4,7 +4,10 @@
<emoji-or-icon class="icon-grab" icon="grab-handle" />
<div class="article-block">
<router-link :to="articleUrl(id)">
<h6 :title="title" class="sub-block-title text-truncate">
<h6
:title="title"
class="text-base text-slate-800 dark:text-slate-100 mb-0 leading-6 h-6 hover:underline overflow-hidden whitespace-nowrap text-ellipsis"
>
{{ title }}
</h6>
</router-link>
@@ -21,7 +24,7 @@
>
<span
:title="category.name"
class="category-link-content text-ellipsis"
class="category-link-content overflow-hidden whitespace-nowrap text-ellipsis"
>
{{ category.name }}
</span>
@@ -133,109 +136,71 @@ export default {
<style lang="scss" scoped>
.article-container--row {
background: var(--white);
border-bottom: 1px solid var(--s-50);
display: grid;
gap: var(--space-normal);
grid-template-columns: repeat(8, minmax(0, 1fr));
margin: 0 var(--space-minus-normal);
padding: 0 var(--space-normal);
@apply bg-white dark:bg-slate-900 my-0 -mx-4 py-0 px-4 grid grid-cols-8 gap-4 border-b border-slate-50 dark:border-slate-800;
@media (max-width: 1024px) {
grid-template-columns: repeat(7, minmax(0, 1fr));
@apply grid-cols-7;
}
@media (max-width: 768px) {
grid-template-columns: repeat(6, minmax(0, 1fr));
@apply grid-cols-6;
}
&.draggable {
span.article-column.article-title {
margin-left: var(--space-minus-small);
@apply -ml-2;
.icon-grab {
display: block;
cursor: move;
height: var(--space-normal);
margin-top: var(--space-smaller);
width: var(--space-normal);
color: var(--s-100);
@apply block cursor-move h-4 mt-1 w-4 text-slate-100 dark:text-slate-700;
&:hover {
color: var(--s-300);
@apply text-slate-300 dark:text-slate-200;
}
}
}
}
span.article-column {
color: var(--s-700);
font-size: var(--font-size-small);
font-weight: var(--font-weight-bold);
padding: var(--space-small) 0;
text-align: right;
text-transform: capitalize;
@apply text-slate-700 dark:text-slate-100 text-sm font-semibold py-2 px-0 text-right capitalize;
&.article-title {
align-items: start;
display: flex;
gap: var(--space-small);
grid-column: span 4 / span 4;
text-align: left;
text-align: left;
@apply items-start flex gap-2 col-span-4 text-left;
.icon-grab {
display: none;
@apply hidden;
}
}
// for screen sizes smaller than 1024px
@media (max-width: 63.9375em) {
&.article-read-count {
display: none;
@apply hidden;
}
}
@media (max-width: 47.9375em) {
&.article-read-count,
&.article-last-edited {
display: none;
@apply hidden;
}
}
}
.article-block {
min-width: 0;
}
.sub-block-title {
margin-bottom: 0;
line-height: var(--space-medium);
height: var(--space-medium);
&:hover {
text-decoration: underline;
}
@apply min-w-0;
}
.author {
.by {
font-weight: var(--font-weight-normal);
color: var(--s-500);
font-size: var(--font-size-small);
@apply font-normal text-slate-500 dark:text-slate-200 text-sm;
}
.name {
font-weight: var(--font-weight-medium);
color: var(--s-600);
font-size: var(--font-size-small);
@apply font-normal text-slate-500 dark:text-slate-200 text-sm;
}
}
}
span {
font-weight: var(--font-weight-normal);
color: var(--s-700);
font-size: var(--font-size-mini);
padding-left: 0;
@apply font-normal text-slate-700 dark:text-slate-100 text-sm pl-0;
}
</style>
@@ -1,7 +1,9 @@
<template>
<div class="article-item">
<h4 class="text-block-title margin-bottom-0">{{ title }}</h4>
<p class="margin-bottom-0 text-truncate">{{ body }}</p>
<p class="margin-bottom-0 overflow-hidden whitespace-nowrap text-ellipsis">
{{ body }}
</p>
<div class="footer">
<p class="text-small meta">
{{ locale }}
@@ -48,6 +48,7 @@
:current-page="currentPage"
:total-count="totalCount"
:page-size="pageSize"
class="dark:bg-slate-900 border-t-0 pl-0 pr-0"
@page-change="onPageChange"
/>
</div>
@@ -140,66 +141,53 @@ export default {
</script>
<style lang="scss" scoped>
.article-container {
width: 100%;
@apply w-full;
.article-container--header {
margin: 0 var(--space-minus-normal);
padding: 0 var(--space-normal);
display: grid;
gap: var(--space-normal);
border-bottom: 1px solid var(--s-100);
grid-template-columns: repeat(8, minmax(0, 1fr));
@apply my-0 -mx-4 py-0 px-4 grid grid-cols-8 gap-4 border-b border-slate-100 dark:border-slate-700;
@media (max-width: 1024px) {
grid-template-columns: repeat(7, minmax(0, 1fr));
@apply grid-cols-7;
}
@media (max-width: 768px) {
grid-template-columns: repeat(6, minmax(0, 1fr));
@apply grid-cols-6;
}
&.draggable {
div.heading-item.heading-title {
padding: var(--space-small) var(--space-snug);
@apply py-2 px-3.5;
}
}
div.heading-item {
font-weight: var(--font-weight-bold);
text-transform: capitalize;
color: var(--s-700);
font-size: var(--font-size-small);
text-align: right;
padding: var(--space-small) 0;
@apply font-semibold capitalize text-sm text-right py-2 px-0 text-slate-700 dark:text-slate-100;
&.heading-title {
text-align: left;
grid-column: span 4 / span 4;
@apply text-left col-span-4;
}
@media (max-width: 1024px) {
&.heading-read-count {
display: none;
@apply hidden;
}
}
@media (max-width: 768px) {
&.heading-read-count,
&.heading-last-edited {
display: none;
@apply hidden;
}
}
}
}
.footer {
padding: 0;
border: 0;
@apply p-0 border-0;
}
}
.article-ghost-class {
opacity: 0.5;
background-color: var(--s-50);
@apply opacity-50 bg-slate-50 dark:bg-slate-800;
}
</style>
@@ -1,16 +1,19 @@
<template>
<div class="header--wrap">
<div class="header-left--wrap">
<div class="flex items-center justify-between w-full h-16 pt-2">
<div class="flex items-center">
<woot-sidemenu-icon />
<div class="header-title">
<h3 class="page-title">{{ headerTitle }}</h3>
<span class="text-block-title count-view">{{ `(${count})` }}</span>
<div class="flex items-center my-0 mx-2">
<h3 class="text-2xl text-slate-800 dark:text-slate-100 mb-0">
{{ headerTitle }}
</h3>
<span class="text-sm text-slate-600 dark:text-slate-300 my-0 mx-2">{{
`(${count})`
}}</span>
</div>
</div>
<div class="header-right--wrap">
<div class="flex items-center gap-1">
<woot-button
v-if="shouldShowSettings"
class-names="article--buttons"
icon="filter"
color-scheme="secondary"
variant="hollow"
@@ -21,7 +24,6 @@
</woot-button>
<woot-button
v-if="shouldShowSettings"
class-names="article--buttons"
icon="arrow-sort"
color-scheme="secondary"
size="small"
@@ -29,7 +31,9 @@
@click="openDropdown"
>
{{ $t('HELP_CENTER.HEADER.SORT') }}
<span class="selected-value">
<span
class="inline-flex ml-1 rtl:ml-0 rtl:mr-1 items-center text-slate-800 dark:text-slate-100"
>
{{ selectedValue }}
<Fluent-icon class="dropdown-arrow" icon="chevron-down" size="14" />
</span>
@@ -76,13 +80,11 @@
v-if="shouldShowSettings"
v-tooltip.top-end="$t('HELP_CENTER.HEADER.SETTINGS_BUTTON')"
icon="settings"
class-names="article--buttons"
variant="hollow"
size="small"
color-scheme="secondary"
/>
<woot-button
class-names="article--buttons"
size="small"
icon="add"
color-scheme="primary"
@@ -150,48 +152,10 @@ export default {
</script>
<style scoped lang="scss">
.header--wrap {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: var(--space-jumbo);
padding-top: var(--space-small);
}
.header-left--wrap {
display: flex;
align-items: center;
.header-title {
display: flex;
align-items: center;
margin: 0 var(--space-small);
.page-title {
margin-bottom: 0;
}
}
}
.header-right--wrap {
display: flex;
align-items: center;
}
.count-view {
margin: 0 var(--space-smaller);
}
.dropdown-pane--open {
top: var(--space-larger);
right: 9.25rem;
}
.selected-value {
display: inline-flex;
margin-left: var(--space-smaller);
color: var(--b-900);
align-items: center;
@apply top-12 right-[9.25rem];
}
.dropdown-arrow {
margin-left: var(--space-smaller);
}
.article--buttons {
margin-left: var(--space-smaller);
@apply ml-1 rtl:ml-0 rtl:mr-1;
}
</style>
@@ -1,6 +1,6 @@
<template>
<div class="header--wrap">
<div class="header-left--wrap">
<div class="flex items-center justify-between w-full h-16 pt-2">
<div class="flex items-center">
<woot-button
icon="chevron-left"
variant="clear"
@@ -12,13 +12,16 @@
{{ backButtonLabel }}
</woot-button>
</div>
<div class="header-right--wrap">
<span v-if="isUpdating || isSaved" class="draft-status">
<div class="flex items-center gap-1">
<span
v-if="isUpdating || isSaved"
class="draft-status mr-1 ml-4 rtl:ml-2 rtl:mr-4 text-slate-400 dark:text-slate-300 items-center text-xs"
>
{{ statusText }}
</span>
<woot-button
class-names="article--buttons"
class-names="article--buttons relative"
icon="globe"
color-scheme="secondary"
variant="hollow"
@@ -30,7 +33,7 @@
<!-- Hidden since this is in V2
<woot-button
v-if="shouldShowAddLocaleButton"
class-names="article--buttons"
class-names="article--buttons relative"
icon="add"
color-scheme="secondary"
variant="hollow"
@@ -43,7 +46,7 @@
v-if="!isSidebarOpen"
v-tooltip.top-end="$t('HELP_CENTER.EDIT_HEADER.OPEN_SIDEBAR')"
icon="pane-open"
class-names="article--buttons sidebar-button"
class-names="article--buttons relative sidebar-button"
variant="hollow"
size="small"
color-scheme="secondary"
@@ -54,13 +57,13 @@
v-if="isSidebarOpen"
v-tooltip.top-end="$t('HELP_CENTER.EDIT_HEADER.CLOSE_SIDEBAR')"
icon="pane-close"
class-names="article--buttons"
class-names="article--buttons relative"
variant="hollow"
size="small"
color-scheme="secondary"
@click="closeSidebar"
/>
<div class="article--buttons">
<div class="article--buttons relative">
<div class="button-group">
<woot-button
class-names="publish-button"
@@ -231,36 +234,12 @@ export default {
</script>
<style scoped lang="scss">
.header--wrap {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: var(--space-jumbo);
padding-top: var(--space-small);
}
.header-left--wrap {
display: flex;
align-items: center;
}
.header-right--wrap {
display: flex;
align-items: center;
}
.article--buttons {
position: relative;
margin-left: var(--space-smaller);
.dropdown-pane {
position: absolute;
right: 0;
@apply absolute right-0;
}
}
.draft-status {
margin-right: var(--space-smaller);
margin-left: var(--space-normal);
color: var(--s-400);
align-items: center;
font-size: var(--font-size-mini);
animation: fadeIn 1s;
@keyframes fadeIn {
0% {
@@ -18,7 +18,7 @@
@open-popover="openPortalPopover"
@open-modal="onClickOpenAddCategoryModal"
/>
<section class="app-content columns">
<section class="app-content flex-1 px-0 bg-white dark:bg-slate-900">
<router-view />
<command-bar />
<account-selector
@@ -1,12 +1,14 @@
<template>
<div>
<div class="portal">
<div
class="bg-white dark:bg-slate-900 rounded-md relative flex mb-3 p-4 border border-solid border-slate-100 dark:border-slate-600"
>
<thumbnail :username="portal.name" variant="square" />
<div class="container">
<header>
<div class="ml-2 rtl:ml-0 rtl:mr-2 flex-grow">
<header class="flex items-start justify-between mb-8">
<div>
<div class="title-status--wrap">
<h2 class="portal-title block-title">
<div class="flex items-center">
<h2 class="mb-0 text-lg text-slate-800 dark:text-slate-100">
{{ portal.name }}
</h2>
<woot-label
@@ -14,10 +16,10 @@
:color-scheme="labelColor"
size="small"
variant="smooth"
class="status"
class="my-0 mx-2"
/>
</div>
<p class="portal-count">
<p class="text-sm mb-0 text-slate-700 dark:text-slate-200">
{{ articleCount }}
{{
$t(
@@ -26,12 +28,11 @@
}}
</p>
</div>
<div>
<div class="flex flex-row gap-1">
<woot-button
variant="smooth"
size="small"
color-scheme="primary"
class="header-action-buttons"
@click="addLocale"
>
{{
@@ -42,7 +43,6 @@
variant="hollow"
size="small"
color-scheme="secondary"
class="header-action-buttons"
@click="openSite"
>
{{
@@ -58,7 +58,6 @@
variant="hollow"
size="small"
icon="settings"
class="header-action-buttons"
color-scheme="secondary"
@click="openSettings"
/>
@@ -70,93 +69,98 @@
color-scheme="alert"
size="small"
icon="delete"
class="header-action-buttons"
@click="onClickOpenDeleteModal(portal)"
/>
</div>
</header>
<div class="portal-locales">
<h2 class="locale-title sub-block-title">
<div class="mb-12">
<h2
class="text-slate-800 dark:text-slate-100 font-medium mb-2 text-base"
>
{{
$t(
'HELP_CENTER.PORTAL.PORTAL_SETTINGS.LIST_ITEM.PORTAL_CONFIG.TITLE'
)
}}
</h2>
<div class="configuration-items--wrap">
<div class="configuration-items">
<div class="configuration-item">
<div
class="flex justify-between mr-[6.25rem] rtl:mr-0 rtl:ml-[6.25rem] max-w-[80vw]"
>
<div class="flex flex-col">
<div class="flex items-start flex-col mb-4">
<label>{{
$t(
'HELP_CENTER.PORTAL.PORTAL_SETTINGS.LIST_ITEM.PORTAL_CONFIG.ITEMS.NAME'
)
}}</label>
<span class="text-block-title">
<span class="text-sm text-slate-600 dark:text-slate-300">
{{ portal.name }}
</span>
</div>
<div class="configuration-item">
<div class="flex items-start flex-col mb-4">
<label>{{
$t(
'HELP_CENTER.PORTAL.PORTAL_SETTINGS.LIST_ITEM.PORTAL_CONFIG.ITEMS.DOMAIN'
)
}}</label>
<span class="text-block-title">
<span class="text-sm text-slate-600 dark:text-slate-300">
{{ portal.custom_domain }}
</span>
</div>
</div>
<div class="configuration-items">
<div class="configuration-item">
<div class="flex flex-col">
<div class="flex items-start flex-col mb-4">
<label>{{
$t(
'HELP_CENTER.PORTAL.PORTAL_SETTINGS.LIST_ITEM.PORTAL_CONFIG.ITEMS.SLUG'
)
}}</label>
<span class="text-block-title">
<span class="text-sm text-slate-600 dark:text-slate-300">
{{ portal.slug }}
</span>
</div>
<div class="configuration-item">
<div class="flex items-start flex-col mb-4">
<label>{{
$t(
'HELP_CENTER.PORTAL.PORTAL_SETTINGS.LIST_ITEM.PORTAL_CONFIG.ITEMS.TITLE'
)
}}</label>
<span class="text-block-title">
<span class="text-sm text-slate-600 dark:text-slate-300">
{{ portal.page_title }}
</span>
</div>
</div>
<div class="configuration-items">
<div class="configuration-item">
<div class="flex flex-col">
<div class="flex items-start flex-col mb-4">
<label>{{
$t(
'HELP_CENTER.PORTAL.PORTAL_SETTINGS.LIST_ITEM.PORTAL_CONFIG.ITEMS.THEME'
)
}}</label>
<div class="content-theme-wrap">
<div class="flex items-center">
<div
class="theme-color"
class="w-4 h-4 rounded-md mr-1 rtl:mr-0 rtl:ml-1 border border-solid border-slate-25 dark:border-slate-800"
:style="{ background: portal.color }"
/>
</div>
</div>
<div class="configuration-item">
<div class="flex items-start flex-col mb-4">
<label>{{
$t(
'HELP_CENTER.PORTAL.PORTAL_SETTINGS.LIST_ITEM.PORTAL_CONFIG.ITEMS.SUB_TEXT'
)
}}</label>
<span class="text-block-title">
<span class="text-sm text-slate-600 dark:text-slate-300">
{{ portal.header_text }}
</span>
</div>
</div>
</div>
</div>
<div class="portal-locales">
<h2 class="locale-title sub-block-title">
<div class="mb-12">
<h2
class="text-slate-800 dark:text-slate-100 font-medium mb-2 text-base"
>
{{
$t(
'HELP_CENTER.PORTAL.PORTAL_SETTINGS.LIST_ITEM.AVAILABLE_LOCALES.TITLE'
@@ -365,94 +369,3 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.portal {
background-color: var(--white);
padding: var(--space-normal);
border: 1px solid var(--color-border-dark);
border-radius: var(--border-radius-medium);
position: relative;
display: flex;
margin-bottom: var(--space-slab);
.container {
margin-left: var(--space-small);
flex-grow: 1;
header {
display: flex;
align-items: flex-start;
justify-content: space-between;
margin-bottom: var(--space-large);
.title-status--wrap {
display: flex;
align-items: center;
.status {
margin: 0 var(--space-small);
}
}
.portal-title {
margin-bottom: 0;
}
.portal-count {
font-size: var(--font-size-small);
margin-bottom: 0;
color: var(--s-700);
}
.header-action-buttons {
margin-left: var(--space-smaller);
}
}
.portal-locales {
margin-bottom: var(--space-large);
.locale-title {
color: var(--s-800);
font-weight: var(--font-weight-medium);
margin-bottom: var(--space-small);
}
}
.portal--heading {
margin-bottom: var(--space-normal);
}
}
.portal-settings--icon {
padding: var(--space-smaller);
margin-left: var(--space-small);
&:hover {
cursor: pointer;
background: var(--s-50);
border-radius: var(--border-radius-normal);
}
}
.configuration-items--wrap {
display: flex;
justify-content: space-between;
margin-right: var(--space-mega);
max-width: 80vw;
.configuration-items {
display: flex;
flex-direction: column;
}
.configuration-item {
display: flex;
align-items: flex-start;
flex-direction: column;
margin-bottom: var(--space-normal);
.content-theme-wrap {
display: flex;
align-items: center;
}
.theme-color {
width: var(--space-normal);
height: var(--space-normal);
border-radius: var(--border-radius-normal);
margin-right: var(--space-smaller);
border: 1px solid var(--color-border-light);
}
}
}
}
</style>
@@ -124,26 +124,23 @@ export default {
<style lang="scss" scoped>
table {
thead tr th {
font-size: var(--font-size-small);
font-weight: var(--font-weight-medium);
text-transform: none;
color: var(--s-600);
padding-left: 0;
padding-top: 0;
@apply text-sm font-medium normal-case text-slate-600 dark:text-slate-200 pl-0 rtl:pl-2.5 rtl:pr-0 pt-0;
}
tbody tr {
border-bottom: 0;
@apply border-b-0;
td {
font-size: var(--font-size-small);
padding-left: 0;
@apply text-sm pl-0 rtl:pl-2.5 rtl:pr-0;
.default-status {
margin: 0 0 0 var(--space-smaller);
@apply py-0 pr-0 pl-1;
}
span {
@apply text-slate-700 dark:text-slate-200;
}
}
}
}
.horizontal-line {
border-bottom: 1px solid var(--color-border);
@apply border-b border-solid border-slate-75 dark:border-slate-700;
}
</style>
@@ -1,8 +1,11 @@
<template>
<div v-on-clickaway="closePortalPopover" class="portal-popover__container">
<div
v-on-clickaway="closePortalPopover"
class="absolute overflow-y-scroll max-h-[96vh] p-4 bg-white dark:bg-slate-800 rounded-md shadow-lg max-w-[30rem] z-[1000]"
>
<header>
<div class="actions">
<h2 class="block-title text-black-900 dark:text-slate-200">
<div class="flex items-center justify-between mb-4">
<h2 class="text-lg text-slate-800 dark:text-slate-100">
{{ $t('HELP_CENTER.PORTAL.POPOVER.TITLE') }}
</h2>
<div>
@@ -24,7 +27,7 @@
/>
</div>
</div>
<p class="subtitle">
<p class="text-xs text-slate-600 dark:text-slate-300 mt-2">
{{ $t('HELP_CENTER.PORTAL.POPOVER.SUBTITLE') }}
</p>
</header>
@@ -82,46 +85,3 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.portal-popover__container {
position: absolute;
overflow-y: scroll;
max-height: 96vh;
padding: var(--space-normal);
background-color: var(--white);
border-radius: var(--border-radius-normal);
box-shadow: var(--shadow-large);
max-width: 30rem;
z-index: var(--z-index-high);
header {
.actions {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--space-normal);
.new-popover-link {
display: flex;
align-items: center;
padding: var(--space-smaller) var(--space-small);
background-color: var(--s-25);
font-size: var(--font-size-mini);
color: var(--s-500);
margin-left: var(--space-small);
border-radius: var(--border-radius-normal);
span {
margin-left: var(--space-small);
}
}
.subtitle {
font-size: var(--font-size-mini);
color: var(--s-600);
margin-top: var(--space-small);
}
}
}
}
</style>
@@ -1,6 +1,6 @@
<template>
<div class="wizard-body columns content-box small-9">
<div class="medium-12 columns">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%]">
<div class="w-full">
<h3 class="block-title text-black-900 dark:text-slate-200">
{{
$t(
@@ -9,17 +9,19 @@
}}
</h3>
</div>
<div class="portal-form">
<div class="medium-8 columns">
<div class="form-item">
<div
class="my-4 mx-0 border-b border-solid border-slate-25 dark:border-slate-800"
>
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<div class="mb-4">
<label>
{{ $t('HELP_CENTER.PORTAL.ADD.LOGO.LABEL') }}
</label>
<div class="logo-container">
<div class="flex items-center flex-row">
<thumbnail :username="name" size="56px" variant="square" />
<woot-button
v-if="false"
class="upload-button"
class="ml-3"
variant="smooth"
color-scheme="secondary"
icon="upload"
@@ -28,11 +30,13 @@
{{ $t('HELP_CENTER.PORTAL.ADD.LOGO.UPLOAD_BUTTON') }}
</woot-button>
</div>
<p class="logo-help--text">
<p
class="mt-1 mb-0 text-xs text-slate-600 dark:text-slate-400 not-italic"
>
{{ $t('HELP_CENTER.PORTAL.ADD.LOGO.HELP_TEXT') }}
</p>
</div>
<div class="form-item">
<div class="mb-4">
<woot-input
v-model.trim="name"
:class="{ error: $v.name.$error }"
@@ -44,7 +48,7 @@
@input="onNameChange"
/>
</div>
<div class="form-item">
<div class="mb-4">
<woot-input
v-model.trim="slug"
:class="{ error: $v.slug.$error }"
@@ -55,7 +59,7 @@
@blur="$v.slug.$touch"
/>
</div>
<div class="form-item">
<div class="mb-4">
<woot-input
v-model.trim="domain"
:class="{ error: $v.domain.$error }"
@@ -185,40 +189,15 @@ export default {
</script>
<style lang="scss" scoped>
.wizard-body {
padding-top: var(--space-slab);
border: 1px solid transparent;
@apply pt-3 border border-solid border-transparent dark:border-transparent;
}
.portal-form {
margin: var(--space-normal) 0;
border-bottom: 1px solid var(--s-25);
.form-item {
margin-bottom: var(--space-normal);
.logo-container {
display: flex;
align-items: center;
flex-direction: row;
.upload-button {
margin-left: var(--space-slab);
}
}
.logo-help--text {
margin-top: var(--space-smaller);
margin-bottom: 0;
font-size: var(--font-size-mini);
color: var(--s-600);
font-style: normal;
}
}
}
::v-deep {
input {
margin-bottom: var(--space-smaller);
@apply mb-1;
}
.help-text {
margin-bottom: 0;
@apply mb-0;
}
}
</style>
@@ -1,24 +1,28 @@
<template>
<div class="wizard-body height-auto small-9 columns">
<div class="medium-12 columns">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%] h-auto">
<div class="w-full">
<h3 class="block-title text-black-900 dark:text-slate-200">
{{
$t('HELP_CENTER.PORTAL.ADD.CREATE_FLOW_PAGE.CUSTOMIZATION_PAGE.TITLE')
}}
</h3>
</div>
<div class="portal-form">
<div class="medium-8 columns">
<div class="form-item">
<div
class="my-4 mx-0 border-b border-solid border-slate-25 dark:border-slate-800"
>
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<div class="mb-4">
<label>
{{ $t('HELP_CENTER.PORTAL.ADD.THEME_COLOR.LABEL') }}
</label>
<woot-color-picker v-model="color" />
<p class="color-help--text">
<p
class="mt-1 mb-0 text-xs text-slate-600 dark:text-slate-400 not-italic"
>
{{ $t('HELP_CENTER.PORTAL.ADD.THEME_COLOR.HELP_TEXT') }}
</p>
</div>
<div class="form-item">
<div class="mb-4">
<woot-input
v-model.trim="pageTitle"
:label="$t('HELP_CENTER.PORTAL.ADD.PAGE_TITLE.LABEL')"
@@ -26,7 +30,7 @@
:help-text="$t('HELP_CENTER.PORTAL.ADD.PAGE_TITLE.HELP_TEXT')"
/>
</div>
<div class="form-item">
<div class="mb-4">
<woot-input
v-model.trim="headerText"
:label="$t('HELP_CENTER.PORTAL.ADD.HEADER_TEXT.LABEL')"
@@ -34,7 +38,7 @@
:help-text="$t('HELP_CENTER.PORTAL.ADD.HEADER_TEXT.HELP_TEXT')"
/>
</div>
<div class="form-item">
<div class="mb-4">
<woot-input
v-model.trim="homePageLink"
:label="$t('HELP_CENTER.PORTAL.ADD.HOME_PAGE_LINK.LABEL')"
@@ -147,33 +151,18 @@ export default {
</script>
<style lang="scss" scoped>
.wizard-body {
padding-top: var(--space-slab);
border: 1px solid transparent;
@apply pt-3 border border-solid border-transparent dark:border-transparent;
}
.portal-form {
margin: var(--space-normal) 0;
border-bottom: 1px solid var(--s-25);
.form-item {
margin-bottom: var(--space-normal);
.color-help--text {
margin-top: var(--space-smaller);
margin-bottom: 0;
font-size: var(--font-size-mini);
color: var(--s-600);
font-style: normal;
}
}
}
::v-deep {
input {
margin-bottom: var(--space-smaller);
@apply mb-1;
}
.help-text {
margin-bottom: 0;
@apply mb-0;
}
.colorpicker--selected {
margin-bottom: 0;
@apply mb-0;
}
}
</style>
@@ -2,10 +2,12 @@
<div class="portal" :class="{ active }">
<thumbnail :username="portal.name" variant="square" />
<div class="actions-container">
<header>
<header class="flex items-center justify-between mb-2.5">
<div>
<h3 class="sub-block-title portal-title">{{ portal.name }}</h3>
<p class="portal-count">
<h3 class="text-sm mb-0.5 text-slate-700 dark:text-slate-100">
{{ portal.name }}
</h3>
<p class="text-slate-600 dark:text-slate-200 mb-0 text-xs">
{{ articlesCount }}
{{ $t('HELP_CENTER.PORTAL.ARTICLES_LABEL') }}
</p>
@@ -19,7 +21,7 @@
/>
</header>
<div class="portal-locales">
<h5 class="locale-title sub-block-title">
<h5 class="text-base text-slate-700 dark:text-slate-100">
{{ $t('HELP_CENTER.PORTAL.CHOOSE_LOCALE_LABEL') }}
</h5>
<ul>
@@ -36,21 +38,23 @@
color-scheme="secondary"
@click="event => onClick(event, locale.code, portal)"
>
<div class="locale-content">
<div class="flex items-center justify-between w-full">
<div class="meta">
<h6 class="text-block-title text-left locale-name">
<span>
<h6 class="text-sm text-left mb-0.5">
<span class="text-slate-700 dark:text-slate-100">
{{ localeName(locale.code) }}
</span>
<span
v-if="isLocaleDefault(locale.code)"
class="fs-small text-muted"
class="fs-small text-slate-300 dark:text-slate-200"
>
{{ `(${$t('HELP_CENTER.PORTAL.DEFAULT')})` }}
</span>
</h6>
<span class="locale-meta">
<span
class="flex text-slate-600 dark:text-slate-200 text-sm text-left leading-4 w-full"
>
{{ locale.articles_count }}
{{ $t('HELP_CENTER.PORTAL.ARTICLES_LABEL') }} -
{{ locale.code }}
@@ -141,97 +145,31 @@ export default {
<style lang="scss" scoped>
.portal {
background-color: var(--white);
padding: var(--space-normal);
border: 1px solid var(--color-border-dark);
border-radius: var(--border-radius-medium);
position: relative;
display: flex;
margin-bottom: var(--space-normal);
@apply bg-white dark:bg-slate-800 rounded-md p-4 relative flex mb-4 border border-solid border-slate-100 dark:border-slate-600;
&.active {
border: 1px solid var(--w-400);
background: var(---25);
@apply bg-white dark:bg-slate-800 border border-solid border-woot-400 dark:border-woot-500;
}
.actions-container {
margin-left: var(--space-one);
flex-grow: 1;
header {
display: flex;
align-items: flex-start;
justify-content: space-between;
margin-bottom: var(--space-one);
.badge {
font-size: var(--font-size-mini);
background-color: var(--w-100);
color: var(--w-600);
padding: var(--space-smaller) var(--space-small);
}
.portal-title {
margin-bottom: var(--space-micro);
}
.portal-count {
font-size: var(--font-size-mini);
margin-bottom: 0;
color: var(--s-600);
}
}
@apply ml-2.5 rtl:ml-0 rtl:mr-2.5 flex-grow;
.portal-locales {
.locale-name {
margin-bottom: var(--space-micro);
}
.locale-content {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
ul {
list-style: none;
padding: 0;
margin: 0;
@apply list-none p-0 m-0;
}
.locale__radio {
width: var(--space-large);
margin-top: var(--space-tiny);
color: var(--g-600);
}
.add-locale-wrap {
margin-top: var(--spacing-small);
@apply w-8 text-green-600 dark:text-green-600;
}
}
}
.locale-item {
display: flex;
align-items: flex-start;
padding: var(--space-smaller) var(--space-normal);
border-radius: var(--border-radius-normal);
width: 100%;
margin-bottom: var(--space-small);
@apply flex items-start py-1 px-4 rounded-md w-full mb-2;
p {
margin-bottom: 0;
text-align: left;
}
.locale-meta {
display: flex;
color: var(--s-600);
font-size: var(--font-size-small);
text-align: left;
line-height: var(--space-normal);
width: 100%;
@apply mb-0 text-left;
}
}
}
@@ -1,7 +1,7 @@
<template>
<transition name="popover-animation">
<div class="article-settings--container">
<h3 class="block-title text-black-900 dark:text-slate-200">
<h3 class="text-base text-slate-800 dark:text-slate-100">
{{ $t('HELP_CENTER.ARTICLE_SETTINGS.TITLE') }}
</h3>
<div class="form-wrap">
@@ -225,48 +225,36 @@ export default {
<style lang="scss" scoped>
.article-settings--container {
flex: 0.3;
min-width: var(--space-giga);
max-width: 22.5rem;
overflow-y: auto;
border-left: 1px solid var(--color-border-light);
margin-left: var(--space-normal);
padding-left: var(--space-normal);
padding-top: var(--space-small);
padding-bottom: var(--space-small);
@apply flex-[0.3] min-w-[15rem] max-w-[22.5rem] py-2 pl-4 rtl:pl-0 rtl:pr-4 ml-4 rtl:ml-0 rtl:mr-4 overflow-y-auto border-l rtl:border-r rtl:border-l-0 border-solid border-slate-50 dark:border-slate-700;
.form-wrap {
margin-top: var(--space-normal);
margin-bottom: var(--space-medium);
@apply mt-4 mb-6;
textarea {
font-size: var(--font-size-small);
@apply text-sm;
}
}
.action-buttons {
display: flex;
flex-direction: column;
@apply flex flex-col;
}
}
::v-deep {
.multiselect {
margin-bottom: 0;
@apply mb-0;
}
.multiselect__content-wrapper {
display: none;
@apply hidden;
}
.multiselect--active .multiselect__tags {
border-radius: var(--border-radius-normal);
padding-right: var(--space-small) !important;
@apply rounded-md;
}
.multiselect__placeholder {
color: var(--s-300);
padding-top: var(--space-small);
margin-bottom: 0;
@apply text-slate-300 dark:text-slate-200 pt-2 mb-0;
}
.multiselect__select {
display: none;
@apply hidden;
}
}
</style>
@@ -4,26 +4,26 @@
:header-title="$t('HELP_CENTER.CATEGORY.ADD.TITLE')"
:header-content="$t('HELP_CENTER.CATEGORY.ADD.SUB_TITLE')"
/>
<form class="row" @submit.prevent="onCreate">
<div class="medium-12 columns">
<div class="row article-info">
<div class="columns medium-6">
<form class="w-full" @submit.prevent="onCreate">
<div class="w-full">
<div class="flex flex-row w-full mt-0 mx-0 mb-4">
<div class="w-[50%]">
<label>
<span>{{ $t('HELP_CENTER.CATEGORY.ADD.PORTAL') }}</span>
<p class="value">{{ portalName }}</p>
<p class="text-slate-600 dark:text-slate-400">{{ portalName }}</p>
</label>
</div>
<div class="columns medium-6">
<div class="w-[50%]">
<label>
<span>{{ $t('HELP_CENTER.CATEGORY.ADD.LOCALE') }}</span>
<p class="value">{{ locale }}</p>
<p class="text-slate-600 dark:text-slate-400">{{ locale }}</p>
</label>
</div>
</div>
<woot-input
v-model.trim="name"
:class="{ error: $v.name.$error }"
class="medium-12 columns"
class="w-full"
:error="nameError"
:label="$t('HELP_CENTER.CATEGORY.ADD.NAME.LABEL')"
:placeholder="$t('HELP_CENTER.CATEGORY.ADD.NAME.PLACEHOLDER')"
@@ -33,7 +33,7 @@
<woot-input
v-model.trim="slug"
:class="{ error: $v.slug.$error }"
class="medium-12 columns"
class="w-full"
:error="slugError"
:label="$t('HELP_CENTER.CATEGORY.ADD.SLUG.LABEL')"
:placeholder="$t('HELP_CENTER.CATEGORY.ADD.SLUG.PLACEHOLDER')"
@@ -51,8 +51,8 @@
"
/>
</label>
<div class="medium-12 columns">
<div class="modal-footer justify-content-end w-full">
<div class="w-full">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button class="button clear" @click.prevent="onClose">
{{ $t('HELP_CENTER.CATEGORY.ADD.BUTTONS.CANCEL') }}
</woot-button>
@@ -174,19 +174,11 @@ export default {
};
</script>
<style scoped lang="scss">
.article-info {
width: 100%;
margin: 0 0 var(--space-normal);
.value {
color: var(--s-600);
}
}
.input-container::v-deep {
margin: 0 0 var(--space-normal);
@apply mt-0 mb-4 mx-0;
input {
margin-bottom: 0;
@apply mb-0;
}
}
</style>
@@ -64,7 +64,10 @@
</tr>
</tbody>
</table>
<p v-if="categories.length === 0" class="empty-text">
<p
v-if="categories.length === 0"
class="flex justify-center text-slate-500 dark:text-slate-300 text-base mt-8"
>
{{ $t('HELP_CENTER.PORTAL.EDIT.CATEGORIES.TABLE.EMPTY_TEXT') }}
</p>
</div>
@@ -93,31 +96,17 @@ export default {
<style lang="scss" scoped>
table {
thead tr th {
font-size: var(--font-size-small);
font-weight: var(--font-weight-medium);
text-transform: none;
color: var(--s-600);
padding-left: 0;
padding-top: 0;
@apply text-sm font-medium normal-case text-slate-800 dark:text-slate-100 pl-0 rtl:pl-2.5 rtl:pr-0 pt-0;
}
tbody tr {
border-bottom: 0;
@apply border-b-0;
td {
font-size: var(--font-size-small);
padding-left: 0;
@apply text-sm pl-0 rtl:pl-2.5 rtl:pr-0 text-slate-700 dark:text-slate-100;
}
}
}
.horizontal-line {
border-bottom: 1px solid var(--color-border);
}
.empty-text {
display: flex;
justify-content: center;
color: var(--s-500);
font-size: var(--font-size-default);
margin-top: var(--space-large);
@apply border-b border-solid border-slate-75 dark:border-slate-700;
}
</style>
@@ -4,26 +4,26 @@
:header-title="$t('HELP_CENTER.CATEGORY.EDIT.TITLE')"
:header-content="$t('HELP_CENTER.CATEGORY.EDIT.SUB_TITLE')"
/>
<form class="row" @submit.prevent="onUpdate">
<div class="medium-12 columns">
<div class="row article-info">
<div class="columns medium-6">
<form class="w-full" @submit.prevent="onUpdate">
<div class="w-full">
<div class="flex flex-row w-full mt-0 mx-0 mb-4">
<div class="w-[50%]">
<label>
<span>{{ $t('HELP_CENTER.CATEGORY.EDIT.PORTAL') }}</span>
<p class="value">{{ portalName }}</p>
<p class="text-slate-600 dark:text-slate-400">{{ portalName }}</p>
</label>
</div>
<div class="columns medium-6">
<div class="w-[50%]">
<label>
<span>{{ $t('HELP_CENTER.CATEGORY.EDIT.LOCALE') }}</span>
<p class="value">{{ locale }}</p>
<p class="text-slate-600 dark:text-slate-400">{{ locale }}</p>
</label>
</div>
</div>
<woot-input
v-model.trim="name"
:class="{ error: $v.name.$error }"
class="medium-12 columns"
class="w-full"
:error="nameError"
:label="$t('HELP_CENTER.CATEGORY.EDIT.NAME.LABEL')"
:placeholder="$t('HELP_CENTER.CATEGORY.EDIT.NAME.PLACEHOLDER')"
@@ -33,7 +33,7 @@
<woot-input
v-model.trim="slug"
:class="{ error: $v.slug.$error }"
class="medium-12 columns"
class="w-full"
:error="slugError"
:label="$t('HELP_CENTER.CATEGORY.EDIT.SLUG.LABEL')"
:placeholder="$t('HELP_CENTER.CATEGORY.EDIT.SLUG.PLACEHOLDER')"
@@ -51,8 +51,8 @@
"
/>
</label>
<div class="medium-12 columns">
<div class="modal-footer justify-content-end w-full">
<div class="w-full">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button class="button clear" @click.prevent="onClose">
{{ $t('HELP_CENTER.CATEGORY.EDIT.BUTTONS.CANCEL') }}
</woot-button>
@@ -25,7 +25,7 @@
</woot-tabs>
</setting-intro-banner>
</div>
<div class="row content-box">
<div class="overflow-auto p-4 max-w-full my-auto flex flex-wrap">
<router-view />
</div>
</div>
@@ -145,17 +145,12 @@ export default {
<style lang="scss" scoped>
.portal-locales {
padding: var(--space-small) var(--space-normal);
width: 100%;
background: var(--white);
height: 100%;
padding: 0 0 0 var(--space-normal);
@apply w-full bg-white dark:bg-slate-900 h-full py-0 pr-0 pl-4;
.button-container {
display: flex;
justify-content: flex-end;
@apply flex justify-end;
}
.locale-container {
margin-top: var(--space-normal);
@apply mt-4;
}
}
</style>
@@ -1,9 +1,11 @@
<template>
<div class="container">
<div class="header-wrap">
<div class="header-left-wrap">
<div class="container py-2 px-4 w-full">
<div class="flex justify-between items-center mt-0 mb-2 mx-0 h-12">
<div class="flex items-center">
<woot-sidemenu-icon />
<h1 class="page-title">{{ $t('HELP_CENTER.PORTAL.HEADER') }}</h1>
<h1 class="my-0 mx-2 text-2xl text-slate-800 dark:text-slate-100">
{{ $t('HELP_CENTER.PORTAL.HEADER') }}
</h1>
</div>
<woot-button
color-scheme="primary"
@@ -14,7 +16,7 @@
{{ $t('HELP_CENTER.PORTAL.NEW_BUTTON') }}
</woot-button>
</div>
<div class="portal-container">
<div class="h-[90vh] overflow-y-scroll">
<portal-list-item
v-for="portal in portals"
:key="portal.id"
@@ -23,7 +25,10 @@
@add-locale="addLocale"
@open-site="openPortal"
/>
<div v-if="isFetching" class="portals--loader">
<div
v-if="isFetching"
class="items-center flex text-base justify-center p-40"
>
<spinner />
<span>{{ $t('HELP_CENTER.PORTAL.LOADING_MESSAGE') }}</span>
</div>
@@ -99,36 +104,3 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.container {
padding: var(--space-small) var(--space-normal);
width: 100%;
.portals--loader {
align-items: center;
display: flex;
font-size: var(--font-size-default);
justify-content: center;
padding: var(--space-big);
}
.header-wrap {
display: flex;
justify-content: space-between;
align-items: center;
margin: 0 0 var(--space-small) 0;
height: var(--space-larger);
.header-left-wrap {
display: flex;
align-items: center;
.page-title {
margin: 0 var(--space-small) 0;
}
}
}
.portal-container {
height: 90vh;
overflow-y: scroll;
}
}
</style>
@@ -1,5 +1,5 @@
<template>
<div class="wrapper">
<div class="flex-1">
<settings-header
button-route="new"
:header-title="portalHeaderText"
@@ -9,9 +9,11 @@
"
:show-new-button="false"
/>
<div class="row content-box full-height">
<div
class="flex flex-row overflow-auto py-4 pl-4 rtl:pl-0 rtl:pr-4 h-full bg-slate-50 dark:bg-slate-800"
>
<woot-wizard
class="hide-for-small-only medium-3 columns"
class="hide-for-small-only w-[25%]"
:global-config="globalConfig"
:items="items"
/>
@@ -62,18 +64,3 @@ export default {
},
};
</script>
<style scoped lang="scss">
.wrapper {
flex: 1;
}
.container {
display: flex;
flex: 1;
}
.wizard-box {
border-right: 1px solid var(--s-25);
::v-deep .item {
background: var(--white);
}
}
</style>
@@ -1,12 +1,12 @@
<template>
<div class="wizard-body height-auto small-9 columns">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%] h-auto">
<empty-state
:title="$t('HELP_CENTER.PORTAL.ADD.CREATE_FLOW_PAGE.FINISH_PAGE.TITLE')"
:message="
$t('HELP_CENTER.PORTAL.ADD.CREATE_FLOW_PAGE.FINISH_PAGE.MESSAGE')
"
>
<div class="medium-12 columns text-center">
<div class="w-full text-center">
<router-link
class="button success nice"
:to="{
@@ -37,7 +37,6 @@ export default {
</script>
<style lang="scss" scoped>
.wizard-body {
padding-top: var(--space-slab);
border: 1px solid transparent;
@apply pb-3;
}
</style>
@@ -2,24 +2,28 @@
<div class="modal-mask">
<div
v-on-clickaway="closeNotificationPanel"
class="notification-wrap flex justify-between z-10 rounded-md shadow-md absolute bg-white dark:bg-slate-800 left-14 rtl:left-auto rtl:right-14 m-4"
class="flex-col h-[90vh] w-[32.5rem] flex justify-between z-10 rounded-md shadow-md absolute bg-white dark:bg-slate-800 left-14 rtl:left-auto rtl:right-14 m-4"
>
<div class="header-wrap w-full flex justify-between">
<div class="header-title--wrap flex">
<span class="header-title">
<div
class="flex-row items-center border-b border-solid pt-5 pb-3 px-6 border-slate-50 dark:border-slate-700 w-full flex justify-between"
>
<div class="items-center flex">
<span class="text-xl font-bold text-slate-800 dark:text-slate-100">
{{ $t('NOTIFICATIONS_PAGE.UNREAD_NOTIFICATION.TITLE') }}
</span>
<span v-if="totalUnreadNotifications" class="total-count block-title">
<span
v-if="totalUnreadNotifications"
class="py-1 px-2 font-semibold text-slate-700 dark:text-slate-200 rounded-md text-xxs ml-2 mr-2 bg-slate-50 dark:bg-slate-700"
>
{{ totalUnreadNotifications }}
</span>
</div>
<div class="flex">
<div class="flex gap-2">
<woot-button
v-if="!noUnreadNotificationAvailable"
color-scheme="primary"
variant="smooth"
size="tiny"
class-names="action-button"
:is-loading="uiFlags.isUpdating"
@click="onMarkAllDoneClick"
>
@@ -29,7 +33,6 @@
color-scheme="secondary"
variant="smooth"
size="tiny"
class-names="action-button"
icon="settings"
@click="openAudioNotificationSettings"
/>
@@ -48,13 +51,15 @@
:on-click-notification="openConversation"
:in-last-page="inLastPage"
/>
<div v-if="records.length !== 0" class="footer-wrap flex justify-between">
<div
v-if="records.length !== 0"
class="items-center py-1 px-5 flex justify-between"
>
<div class="flex">
<woot-button
size="medium"
variant="clear"
color-scheme="secondary"
class-names="page-change--button"
:is-disabled="inFirstPage"
@click="onClickFirstPage"
>
@@ -74,7 +79,9 @@
@click="onClickPreviousPage"
/>
</div>
<span class="page-count"> {{ currentPage }} - {{ lastPage }} </span>
<span class="text-xxs font-semibold text-slate-500 dark:text-slate-400">
{{ currentPage }} - {{ lastPage }}
</span>
<div class="flex">
<woot-button
color-scheme="secondary"
@@ -88,7 +95,6 @@
size="medium"
variant="clear"
color-scheme="secondary"
class-names="page-change--button"
:disabled="inLastPage"
@click="onClickLastPage"
>
@@ -235,56 +241,3 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.notification-wrap {
flex-direction: column;
height: 90vh;
width: 32.5rem;
}
.header-wrap {
flex-direction: row;
align-items: center;
border-bottom: 1px solid var(--s-50);
padding: var(--space-two) var(--space-medium) var(--space-slab)
var(--space-medium);
.header-title--wrap {
align-items: center;
}
.header-title {
font-size: var(--font-size-two);
font-weight: var(--font-weight-black);
}
.total-count {
padding: var(--space-smaller) var(--space-small);
background: var(--b-50);
border-radius: var(--border-radius-normal);
font-size: var(--font-size-micro);
font-weight: var(--font-weight-bold);
margin-left: var(--space-smaller);
margin-right: var(--space-smaller);
}
.action-button {
margin-right: var(--space-small);
}
}
.page-count {
font-size: var(--font-size-micro);
font-weight: var(--font-weight-bold);
color: var(--s-500);
}
.footer-wrap {
align-items: center;
padding: var(--space-smaller) var(--space-two);
}
.page-change--button:hover {
background: var(--s-50);
}
</style>
@@ -1,5 +1,5 @@
<template>
<div class="notification-list-item--wrap h-full flex-view ">
<div class="flex-col py-2 px-2.5 overflow-auto h-full flex ">
<woot-button
v-for="notificationItem in notifications"
v-show="!isLoading"
@@ -9,16 +9,20 @@
variant="link"
@click="() => onClickNotification(notificationItem)"
>
<div class="notification-list--wrap flex-view w-full">
<div
class="flex-row items-center p-2.5 leading-[1.4] border-b border-solid border-slate-50 dark:border-slate-700 flex w-full hover:bg-slate-75 dark:hover:bg-slate-900 hover:rounded-md"
>
<div
v-if="!notificationItem.read_at"
class="notification-unread--indicator"
class="w-2 h-2 rounded-full bg-woot-500"
/>
<div v-else class="empty flex-view" />
<div class="notification-content--wrap w-full flex-space-between">
<div class="flex-space-between">
<div class="title-wrap flex-view ">
<span class="notification-title">
<div v-else class="w-2 flex" />
<div
class="flex-col ml-2.5 overflow-hidden w-full flex justify-between"
>
<div class="flex justify-between">
<div class="items-center flex ">
<span class="font-bold text-slate-800 dark:text-slate-100">
{{
`#${
notificationItem.primary_actor
@@ -27,7 +31,9 @@
}`
}}
</span>
<span class="notification-type">
<span
class="text-xxs p-0.5 px-1 my-0 mx-2 bg-slate-50 dark:bg-slate-700 rounded-md"
>
{{
$t(
`NOTIFICATIONS_PAGE.TYPE_LABEL.${notificationItem.notification_type}`
@@ -44,12 +50,16 @@
/>
</div>
</div>
<div class="w-full flex-view ">
<span class="notification-message text-truncate">
<div class="w-full flex ">
<span
class="text-slate-700 dark:text-slate-200 font-normal overflow-hidden whitespace-nowrap text-ellipsis"
>
{{ notificationItem.push_message_title }}
</span>
</div>
<span class="timestamp flex-view">
<span
class="mt-1 text-slate-500 dark:text-slate-400 text-xxs font-semibold flex"
>
{{ dynamicTime(notificationItem.created_at) }}
</span>
</div>
@@ -61,15 +71,18 @@
/>
<woot-button
v-if="!isLoading && inLastPage"
size="medium"
size="expanded"
variant="clear"
color-scheme="primary"
class-names="action-button"
class-names="mt-3"
@click="openNotificationPage"
>
{{ $t('NOTIFICATIONS_PAGE.UNREAD_NOTIFICATION.ALL_NOTIFICATIONS') }}
</woot-button>
<div v-if="isLoading" class="notifications-loader flex-view">
<div
v-if="isLoading"
class="items-center justify-center my-12 mx-2 text-sm font-medium flex"
>
<spinner />
<span>{{
$t('NOTIFICATIONS_PAGE.UNREAD_NOTIFICATION.LOADING_UNREAD_MESSAGE')
@@ -133,90 +146,3 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.flex-view {
display: flex;
}
.flex-space-between {
display: flex;
justify-content: space-between;
}
.notification-list-item--wrap {
flex-direction: column;
padding: var(--space-small) var(--space-slab);
overflow: auto;
}
.empty {
width: var(--space-small);
}
.notification-list--wrap {
flex-direction: row;
align-items: center;
padding: var(--space-slab);
line-height: 1.4;
border-bottom: 1px solid var(--b-50);
}
.notification-list--wrap:hover {
background: var(--b-100);
border-radius: var(--border-radius-normal);
}
.notification-content--wrap {
flex-direction: column;
margin-left: var(--space-slab);
overflow: hidden;
}
.title-wrap {
align-items: center;
}
.notification-title {
font-weight: var(--font-weight-black);
}
.notification-type {
font-size: var(--font-size-micro);
padding: var(--space-micro) var(--space-smaller);
margin: 0 var(--space-small);
background: var(--s-50);
border-radius: var(--border-radius-normal);
}
.notification-message {
color: var(--color-body);
font-weight: var(--font-weight-normal);
}
.timestamp {
margin-top: var(--space-smaller);
color: var(--b-500);
font-size: var(--font-size-micro);
font-weight: var(--font-weight-bold);
}
.notification-unread--indicator {
width: var(--space-small);
height: var(--space-small);
border-radius: var(--border-radius-rounded);
background: var(--color-woot);
}
.action-button {
margin-top: var(--space-slab);
}
.notifications-loader {
align-items: center;
justify-content: center;
margin: var(--space-larger) var(--space-small);
font-size: var(--font-size-small);
font-weight: var(--font-weight-medium);
}
</style>
@@ -1,5 +1,5 @@
<template>
<section class="notification--table-wrap">
<section class="notification--table-wrap bg-white dark:bg-slate-900">
<woot-submit-button
v-if="notificationMetadata.unreadCount"
class="button nice success button--fixed-top"
@@ -19,7 +19,9 @@
@click="() => onClickNotification(notificationItem)"
>
<td>
<div class="flex-view notification-contant--wrap text-truncate">
<div
class="flex-view notification-contant--wrap overflow-hidden whitespace-nowrap text-ellipsis"
>
<h5 class="notification--title">
{{
`#${
@@ -29,7 +31,9 @@
}`
}}
</h5>
<span class="notification--message-title text-truncate">
<span
class="notification--message-title overflow-hidden whitespace-nowrap text-ellipsis"
>
{{ notificationItem.push_message_title }}
</span>
</div>
@@ -129,86 +133,72 @@ export default {
@import '~dashboard/assets/scss/mixins';
.notification--title {
font-size: var(--font-size-small);
margin: 0;
@apply text-sm m-0 text-slate-800 dark:text-slate-100;
}
.notification--table-wrap {
@include scroll-on-hover;
flex: 1 1;
height: 100%;
padding: var(--space-large) var(--space-larger);
@apply overflow-hidden hover:overflow-y-auto flex-shrink flex-grow h-full py-8 px-12;
}
.notifications-table {
> tbody {
> tr {
cursor: pointer;
@apply cursor-pointer;
&:hover {
background: var(--b-50);
@apply bg-slate-50 dark:bg-slate-800;
}
&.is-active {
background: var(--b-100);
@apply bg-slate-100 dark:bg-slate-700;
}
> td {
&.conversation-count-item {
padding-left: var(--space-medium);
@apply pl-6 rtl:pl-0 rtl:pr-6;
}
}
&:last-child {
border-bottom: 0;
@apply border-b-0;
}
}
}
}
.is-unread {
font-weight: var(--font-weight-bold);
@apply font-semibold;
}
.notifications--loader {
font-size: var(--font-size-default);
display: flex;
align-items: center;
justify-content: center;
padding: var(--space-big);
@apply text-base flex items-center justify-center p-10;
}
.notification--unread-indicator {
width: var(--space-one);
height: var(--space-one);
border-radius: 50%;
background: var(--color-woot);
@apply w-2.5 h-2.5 rounded-full bg-woot-500 dark:bg-woot-500;
}
.notification--created-at {
color: var(--s-700);
font-size: var(--font-size-mini);
@apply text-slate-700 dark:text-slate-200 text-xs;
}
.notification--type {
font-size: var(--font-size-mini);
@apply text-xs;
}
.thumbnail--column {
width: 3.25rem;
@apply w-[3.25rem];
}
.timestamp--column {
min-width: 8.125rem;
text-align: right;
@apply min-w-[9.125rem] text-right;
}
.notification-contant--wrap {
flex-direction: column;
max-width: 31.25rem;
@apply flex-col max-w-[31.25rem];
}
.notification--message-title {
color: var(--s-700);
@apply text-slate-700 dark:text-slate-100;
}
</style>
@@ -1,17 +1,24 @@
<template>
<div
class="settings-header bg-white dark:bg-slate-900 border-b border-slate-50 dark:border-slate-800"
class="flex justify-between items-center h-14 min-h-[3.5rem] px-4 py-2 bg-white dark:bg-slate-900 border-b border-slate-50 dark:border-slate-800/50"
>
<h1 class="page-title text-black-900 dark:text-slate-300">
<h1
class="text-2xl mb-0 flex items-center text-slate-900 dark:text-slate-100"
>
<woot-sidemenu-icon v-if="showSidemenuIcon" />
<back-button
v-if="showBackButton"
:button-label="backButtonLabel"
:back-url="backUrl"
/>
<fluent-icon v-if="icon" :icon="icon" :class="iconClass" />
<fluent-icon
v-if="icon"
:icon="icon"
:class="iconClass"
class="mr-2 ml-4 rtl:ml-2 rtl:mr-4"
/>
<slot />
<span>{{ headerTitle }}</span>
<span class="text-slate-900 dark:text-slate-100">{{ headerTitle }}</span>
</h1>
<router-link
v-if="showNewButton && isAdmin"
@@ -1,9 +1,12 @@
<template>
<div class="column">
<h2 class="page-sub-title">
<div class="flex flex-col w-full items-start">
<h2 class="text-xl text-slate-800 dark:text-slate-100 break-words">
{{ headerTitle }}
</h2>
<p v-dompurify-html="headerContent" class="small-12 column" />
<p
v-dompurify-html="headerContent"
class="text-sm w-full text-slate-600 dark:text-slate-300"
/>
</div>
</template>
@@ -1,5 +1,7 @@
<template>
<div class="view-box columns bg-light">
<div
class="flex flex-1 h-full justify-between flex-col m-0 bg-light dark:bg-slate-900"
>
<settings-header
button-route="new"
:icon="icon"
@@ -1,16 +1,18 @@
<template>
<div class="columns profile--settings">
<div class="flex-grow flex-shrink min-w-0 p-6 overflow-auto">
<form v-if="!uiFlags.isFetchingItem" @submit.prevent="updateAccount">
<div
class="small-12 row profile--settings--row border-b border-slate-25 dark:border-slate-700"
class="flex flex-row p-4 border-b border-slate-25 dark:border-slate-700"
>
<div class="columns small-3">
<div
class="flex-grow-0 flex-shrink-0 flex-[25%] min-w-0 py-4 pr-6 pl-0"
>
<h4 class="block-title text-black-900 dark:text-slate-200">
{{ $t('GENERAL_SETTINGS.FORM.GENERAL_SECTION.TITLE') }}
</h4>
<p>{{ $t('GENERAL_SETTINGS.FORM.GENERAL_SECTION.NOTE') }}</p>
</div>
<div class="columns small-9 medium-5">
<div class="p-4 flex-grow-0 flex-shrink-0 flex-[50%]">
<label :class="{ error: $v.name.$error }">
{{ $t('GENERAL_SETTINGS.FORM.NAME.LABEL') }}
<input
@@ -85,9 +87,11 @@
</div>
<div
class="profile--settings--row border-slate-25 dark:border-slate-700 text-black-900 dark:text-slate-300 row"
class="p-4 border-slate-25 dark:border-slate-700 text-black-900 dark:text-slate-300 row"
>
<div class="columns small-3">
<div
class="flex-grow-0 flex-shrink-0 flex-[25%] min-w-0 py-4 pr-6 pl-0"
>
<h4 class="block-title text-black-900 dark:text-slate-200">
{{ $t('GENERAL_SETTINGS.FORM.ACCOUNT_ID.TITLE') }}
</h4>
@@ -95,11 +99,11 @@
{{ $t('GENERAL_SETTINGS.FORM.ACCOUNT_ID.NOTE') }}
</p>
</div>
<div class="columns small-9 medium-5">
<div class="p-4 flex-grow-0 flex-shrink-0 flex-[50%]">
<woot-code :script="getAccountId" />
</div>
</div>
<div class="current-version">
<div class="text-sm text-center p-4">
<div>{{ `v${globalConfig.appVersion}` }}</div>
<div v-if="hasAnUpdateAvailable && globalConfig.displayManifest">
{{
@@ -281,29 +285,3 @@ export default {
},
};
</script>
<style lang="scss">
@import '~dashboard/assets/scss/variables.scss';
@import '~dashboard/assets/scss/mixins.scss';
.profile--settings {
padding: 24px;
overflow: auto;
}
.profile--settings--row {
padding: $space-normal;
.small-3 {
padding: $space-normal $space-medium $space-normal 0;
}
.small-9 {
padding: $space-normal;
}
}
.current-version {
font-size: var(--font-size-small);
text-align: center;
padding: var(--space-normal);
}
</style>
@@ -1,7 +1,7 @@
<template>
<div class="column content-box">
<div class="row">
<div class="small-8 columns with-right-space">
<div class="flex-1 overflow-auto p-4">
<div class="flex flex-row gap-4">
<div class="w-[60%]">
<woot-loading-state
v-if="uiFlags.isFetching"
:message="$t('AGENT_BOTS.LIST.LOADING')"
@@ -23,7 +23,7 @@
</p>
</div>
<div class="small-4 columns content-box">
<div class="w-[34%]">
<p v-html="$t('AGENT_BOTS.SIDEBAR_TXT')" />
</div>
</div>
@@ -57,14 +57,12 @@ export default {
<style scoped lang="scss">
.agent-bot--link {
align-items: center;
color: var(--s-800);
display: flex;
font-weight: var(--font-weight-medium);
word-break: break-word;
}
.agent-bot--description {
color: var(--s-700);
font-size: var(--font-size-mini);
}
@@ -1,16 +1,22 @@
<template>
<div class="column content-box no-padding">
<div class="row">
<div class="small-8 columns">
<div class="full-height editor-wrapper">
<csml-monaco-editor v-model="bot.csmlContent" class="bot-editor" />
<div v-if="$v.bot.csmlContent.$error" class="editor-error-message">
<div class="h-auto overflow-auto flex flex-col">
<div class="flex flex-row">
<div class="w-[68%]">
<div class="h-[calc(100vh-56px)] relative">
<csml-monaco-editor v-model="bot.csmlContent" class="w-full h-full" />
<div
v-if="$v.bot.csmlContent.$error"
class="bg-red-100 dark:bg-red-200 text-white dark:text-white absolute bottom-0 w-full p-2.5 flex items-center text-xs justify-center flex-shrink-0"
>
<span>{{ $t('AGENT_BOTS.CSML_BOT_EDITOR.BOT_CONFIG.ERROR') }}</span>
</div>
</div>
</div>
<div class="small-4 columns content-box full-height">
<form class="details-editor" @submit.prevent="onSubmit">
<div class="w-[32%] overflow-auto p-4 h-[calc(100vh-56px)]">
<form
class="flex flex-col justify-between h-full"
@submit.prevent="onSubmit"
>
<div>
<label :class="{ error: $v.bot.name.$error }">
{{ $t('AGENT_BOTS.CSML_BOT_EDITOR.NAME.LABEL') }}
@@ -84,38 +90,3 @@ export default {
},
};
</script>
<style scoped>
.no-padding {
padding: 0 !important;
}
.full-height {
height: calc(100vh - 56px);
}
.bot-editor {
width: 100%;
height: 100%;
}
.details-editor {
display: flex;
flex-direction: column;
justify-content: space-between;
height: 100%;
}
.editor-wrapper {
position: relative;
}
.editor-error-message {
position: absolute;
bottom: 0;
width: 100%;
padding: 0.625rem;
background-color: #e0bbbb;
display: flex;
align-items: center;
font-size: 0.75rem;
justify-content: center;
flex-shrink: 0;
}
</style>
@@ -4,7 +4,7 @@
:agent-bot="agentBot"
@submit="updateBot"
/>
<div v-else class="column content-box no-padding">
<div v-else class="h-auto overflow-auto flex flex-col no-padding">
<spinner />
</div>
</template>
@@ -1,13 +1,16 @@
<template>
<woot-modal :show.sync="show" :on-close="onClose">
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header
:header-title="$t('AGENT_MGMT.ADD.TITLE')"
:header-content="$t('AGENT_MGMT.ADD.DESC')"
/>
<form class="row" @submit.prevent="addAgent()">
<div class="medium-12 columns">
<form
class="flex flex-col w-full items-start"
@submit.prevent="addAgent()"
>
<div class="w-full">
<label :class="{ error: $v.agentName.$error }">
{{ $t('AGENT_MGMT.ADD.FORM.NAME.LABEL') }}
<input
@@ -18,7 +21,7 @@
/>
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<label :class="{ error: $v.agentType.$error }">
{{ $t('AGENT_MGMT.ADD.FORM.AGENT_TYPE.LABEL') }}
<select v-model="agentType">
@@ -31,7 +34,7 @@
</span>
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<label :class="{ error: $v.agentEmail.$error }">
{{ $t('AGENT_MGMT.ADD.FORM.EMAIL.LABEL') }}
<input
@@ -42,8 +45,8 @@
/>
</label>
</div>
<div class="modal-footer">
<div class="medium-12 columns">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<div class="w-full">
<woot-submit-button
:disabled="
$v.agentEmail.$invalid ||
@@ -1,9 +1,9 @@
<template>
<modal :show.sync="show" :on-close="onClose">
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header :header-title="pageTitle" />
<form class="row medium-8" @submit.prevent="editAgent()">
<div class="medium-12 columns">
<form class="w-full" @submit.prevent="editAgent()">
<div class="w-full">
<label :class="{ error: $v.agentName.$error }">
{{ $t('AGENT_MGMT.EDIT.FORM.NAME.LABEL') }}
<input
@@ -15,7 +15,7 @@
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<label :class="{ error: $v.agentType.$error }">
{{ $t('AGENT_MGMT.EDIT.FORM.AGENT_TYPE.LABEL') }}
<select v-model="agentType">
@@ -29,7 +29,7 @@
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<label :class="{ error: $v.agentAvailability.$error }">
{{ $t('PROFILE_SETTINGS.FORM.AVAILABILITY.LABEL') }}
<select v-model="agentAvailability">
@@ -46,8 +46,8 @@
</span>
</label>
</div>
<div class="medium-12 modal-footer">
<div class="medium-6 columns">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<div class="w-[50%]">
<woot-submit-button
:disabled="
$v.agentType.$invalid ||
@@ -61,7 +61,7 @@
{{ $t('AGENT_MGMT.EDIT.CANCEL_BUTTON_TEXT') }}
</button>
</div>
<div class="medium-6 columns text-right">
<div class="w-[50%] text-right">
<woot-button
icon="lock-closed"
variant="clear"
@@ -1,5 +1,5 @@
<template>
<div class="column content-box">
<div class="flex-1 overflow-auto p-4">
<woot-button
color-scheme="success"
class-names="button--fixed-top"
@@ -10,8 +10,8 @@
</woot-button>
<!-- List Agents -->
<div class="row">
<div class="small-8 columns with-right-space ">
<div class="flex flex-row gap-4">
<div class="w-[60%]">
<woot-loading-state
v-if="uiFlags.isFetching"
:message="$t('AGENT_MGMT.LOADING')"
@@ -85,7 +85,7 @@
</table>
</div>
</div>
<div class="small-4 columns">
<div class="w-[34%]">
<span
v-dompurify-html="
useInstallationName(
@@ -1,10 +1,10 @@
<template>
<woot-modal :show.sync="show" :on-close="onClose">
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header :header-title="$t('ATTRIBUTES_MGMT.ADD.TITLE')" />
<form class="row" @submit.prevent="addAttributes">
<div class="medium-12 columns">
<form class="flex w-full" @submit.prevent="addAttributes">
<div class="w-full">
<label :class="{ error: $v.attributeModel.$error }">
{{ $t('ATTRIBUTES_MGMT.ADD.FORM.MODEL.LABEL') }}
<select v-model="attributeModel">
@@ -86,7 +86,7 @@
{{ $t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.LIST.ERROR') }}
</label>
</div>
<div class="modal-footer">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-submit-button
:disabled="isButtonDisabled"
:button-text="$t('ATTRIBUTES_MGMT.ADD.SUBMIT')"
@@ -1,6 +1,6 @@
<template>
<div class="row table-wrap">
<div class="column">
<div class="flex flex-row gap-4 pl-2">
<div class="w-[60%]">
<woot-tabs :index="selectedTabIndex" @change="onClickTabChange">
<woot-tabs-item
v-for="tab in tabs"
@@ -10,11 +10,8 @@
/>
</woot-tabs>
<div class="columns with-right-space">
<p
v-if="!uiFlags.isFetching && !attributes.length"
class="no-items-error-message"
>
<div class="w-full">
<p v-if="!uiFlags.isFetching && !attributes.length" class="mt-12">
{{ $t('ATTRIBUTES_MGMT.LIST.EMPTY_RESULT.404') }}
</p>
<woot-loading-state
@@ -23,29 +20,37 @@
/>
<table
v-if="!uiFlags.isFetching && attributes.length"
class="woot-table"
class="w-full mt-2 table-fixed woot-table"
>
<thead>
<th
v-for="tableHeader in $t('ATTRIBUTES_MGMT.LIST.TABLE_HEADER')"
:key="tableHeader"
class="item"
class="pl-0 max-w-[6.25rem] min-w-[5rem]"
>
{{ tableHeader }}
</th>
</thead>
<tbody>
<tr v-for="attribute in attributes" :key="attribute.attribute_key">
<td class="item text-truncate">
<td
class="pl-0 max-w-[6.25rem] min-w-[5rem] overflow-hidden whitespace-nowrap text-ellipsis"
>
{{ attribute.attribute_display_name }}
</td>
<td class="item-description text-truncate">
<td
class="pl-0 max-w-[10rem] min-w-[6.25rem] overflow-hidden whitespace-nowrap text-ellipsis"
>
{{ attribute.attribute_description }}
</td>
<td class="item text-truncatee">
<td
class="pl-0 max-w-[6.25rem] min-w-[5rem] overflow-hidden whitespace-nowrap text-ellipsis"
>
{{ attribute.attribute_display_type }}
</td>
<td class="item key text-truncate">
<td
class="attribute-key pl-0 max-w-[6.25rem] min-w-[5rem] overflow-hidden whitespace-nowrap text-ellipsis"
>
{{ attribute.attribute_key }}
</td>
<td class="button-wrapper">
@@ -73,7 +78,7 @@
</table>
</div>
</div>
<div class="small-4 columns">
<div class="w-[34%]">
<span v-dompurify-html="$t('ATTRIBUTES_MGMT.SIDEBAR_TXT')" />
</div>
<woot-modal :show.sync="showEditPopup" :on-close="hideEditPopup">
@@ -206,43 +211,16 @@ export default {
</script>
<style lang="scss" scoped>
.table-wrap {
padding-left: var(--space-small);
}
.woot-table {
width: 100%;
margin-top: var(--space-small);
table-layout: fixed;
}
.no-items-error-message {
margin-top: var(--space-larger);
}
.tabs {
padding-left: 0;
margin-right: var(--space-medium);
user-select: none;
}
.item {
padding-left: 0;
max-width: 6.25rem;
min-width: 5rem;
}
.item-description {
padding-left: 0;
max-width: 10rem;
min-width: 6.25rem;
}
.key {
.attribute-key {
font-family: monospace;
}
::v-deep {
.tabs--container {
.tabs {
@apply p-0;
}
}
.tabs-title a {
font-weight: var(--font-weight-medium);
padding-top: 0;
@@ -1,8 +1,8 @@
<template>
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header :header-title="pageTitle" />
<form class="row" @submit.prevent="editAttributes">
<div class="medium-12 columns">
<form class="flex flex-col w-full" @submit.prevent="editAttributes">
<div class="w-full">
<woot-input
v-model.trim="displayName"
:label="$t('ATTRIBUTES_MGMT.ADD.FORM.NAME.LABEL')"
@@ -71,7 +71,7 @@
</label>
</div>
</div>
<div class="modal-footer">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button :is-loading="isUpdating" :disabled="isButtonDisabled">
{{ $t('ATTRIBUTES_MGMT.EDIT.UPDATE_BUTTON_TEXT') }}
</woot-button>
@@ -1,5 +1,5 @@
<template>
<div class="column content-box">
<div class="flex-1 overflow-auto p-4">
<woot-button
color-scheme="success"
class-names="button--fixed-top"
@@ -1,5 +1,5 @@
<template>
<div class="column content-box audit-log--settings">
<div class="flex-1 overflow-auto p-4 flex justify-between flex-col">
<!-- List Audit Logs -->
<div>
<div>
@@ -16,10 +16,10 @@
<table
v-if="!uiFlags.fetchingList && records.length"
class="woot-table width-100"
class="woot-table w-full"
>
<colgroup>
<col class="column-activity" />
<col class="w-[60%]" />
<col />
<col />
</colgroup>
@@ -34,10 +34,10 @@
</thead>
<tbody>
<tr v-for="auditLogItem in records" :key="auditLogItem.id">
<td class="wrap-break-words">
<td class="whitespace-nowrap break-all">
{{ generateLogText(auditLogItem) }}
</td>
<td class="wrap-break-words">
<td class="whitespace-nowrap break-all">
{{
messageTimestamp(
auditLogItem.created_at,
@@ -45,7 +45,7 @@
)
}}
</td>
<td class="remote-address">
<td class="w-[8.75rem]">
{{ auditLogItem.remote_address }}
</td>
</tr>
@@ -57,6 +57,7 @@
:current-page="Number(meta.currentPage)"
:total-count="meta.totalEntries"
:page-size="meta.perPage"
class="dark:bg-slate-900"
@page-change="onPageChange"
/>
</div>
@@ -133,24 +134,3 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.audit-log--settings {
display: flex;
justify-content: space-between;
flex-direction: column;
.remote-address {
width: 8.75rem;
}
.wrap-break-words {
word-break: break-all;
white-space: normal;
}
.column-activity {
width: 60%;
}
}
</style>
@@ -1,8 +1,8 @@
<template>
<div class="column">
<div>
<woot-modal-header :header-title="$t('AUTOMATION.ADD.TITLE')" />
<div class="row modal-content">
<div class="medium-12 columns">
<div class="flex flex-col modal-content">
<div class="w-full">
<woot-input
v-model="automation.name"
:label="$t('AUTOMATION.ADD.FORM.NAME.LABEL')"
@@ -54,7 +54,9 @@
<label>
{{ $t('AUTOMATION.ADD.FORM.CONDITIONS.LABEL') }}
</label>
<div class="medium-12 columns filters-wrap">
<div
class="w-full p-4 bg-slate-25 dark:bg-slate-700 rounded-lg border border-solid border-slate-50 dark:border-slate-700 mb-4"
>
<filter-input-box
v-for="(condition, i) in automation.conditions"
:key="i"
@@ -75,7 +77,7 @@
@resetFilter="resetFilter(i, automation.conditions[i])"
@removeFilter="removeFilter(i)"
/>
<div class="filter-actions">
<div class="mt-4">
<woot-button
icon="add"
color-scheme="success"
@@ -94,7 +96,9 @@
<label>
{{ $t('AUTOMATION.ADD.FORM.ACTIONS.LABEL') }}
</label>
<div class="medium-12 columns filters-wrap">
<div
class="w-full p-4 bg-slate-25 dark:bg-slate-700 rounded-lg border border-solid border-slate-50 dark:border-slate-700 mb-4"
>
<automation-action-input
v-for="(action, i) in automation.actions"
:key="i"
@@ -110,7 +114,7 @@
@resetAction="resetAction(i)"
@removeAction="removeAction(i)"
/>
<div class="filter-actions">
<div class="mt-4">
<woot-button
icon="add"
color-scheme="success"
@@ -124,8 +128,8 @@
</div>
</section>
<!-- // Actions End -->
<div class="medium-12 columns">
<div class="modal-footer justify-content-end w-full">
<div class="w-full">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button class="button clear" @click.prevent="onClose">
{{ $t('AUTOMATION.ADD.CANCEL_BUTTON_TEXT') }}
</woot-button>
@@ -220,26 +224,14 @@ export default {
};
</script>
<style lang="scss" scoped>
.filters-wrap {
padding: var(--space-normal);
border-radius: var(--border-radius-large);
border: 1px solid var(--color-border);
background: var(--color-background-light);
margin-bottom: var(--space-normal);
}
.filter-actions {
margin-top: var(--space-normal);
}
.event_wrapper {
select {
margin: var(--space-zero);
@apply m-0;
}
.info-message {
font-size: var(--font-size-mini);
color: var(--s-500);
text-align: right;
@apply text-xs text-green-500 dark:text-green-500 text-right;
}
margin-bottom: var(--space-medium);
@apply mb-6;
}
</style>
@@ -1,8 +1,8 @@
<template>
<div class="column">
<div>
<woot-modal-header :header-title="$t('AUTOMATION.EDIT.TITLE')" />
<div class="row modal-content">
<div v-if="automation" class="medium-12 columns">
<div class="flex flex-col modal-content">
<div v-if="automation" class="w-full">
<woot-input
v-model="automation.name"
:label="$t('AUTOMATION.ADD.FORM.NAME.LABEL')"
@@ -51,7 +51,9 @@
<label>
{{ $t('AUTOMATION.ADD.FORM.CONDITIONS.LABEL') }}
</label>
<div class="medium-12 columns filters-wrap">
<div
class="w-full w-full p-4 bg-slate-25 dark:bg-slate-700 rounded-lg border border-solid border-slate-50 dark:border-slate-700 mb-4"
>
<filter-input-box
v-for="(condition, i) in automation.conditions"
:key="i"
@@ -72,7 +74,7 @@
@resetFilter="resetFilter(i, automation.conditions[i])"
@removeFilter="removeFilter(i)"
/>
<div class="filter-actions">
<div class="mt-4">
<woot-button
icon="add"
color-scheme="success"
@@ -91,7 +93,9 @@
<label>
{{ $t('AUTOMATION.ADD.FORM.ACTIONS.LABEL') }}
</label>
<div class="medium-12 columns filters-wrap">
<div
class="w-full w-full p-4 bg-slate-25 dark:bg-slate-700 rounded-lg border border-solid border-slate-50 dark:border-slate-700 mb-4"
>
<automation-action-input
v-for="(action, i) in automation.actions"
:key="i"
@@ -104,7 +108,7 @@
@resetAction="resetAction(i)"
@removeAction="removeAction(i)"
/>
<div class="filter-actions">
<div class="mt-4">
<woot-button
icon="add"
color-scheme="success"
@@ -118,8 +122,8 @@
</div>
</section>
<!-- // Actions End -->
<div class="medium-12 columns">
<div class="modal-footer justify-content-end w-full">
<div class="w-full">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button
class="button"
variant="clear"
@@ -198,26 +202,14 @@ export default {
};
</script>
<style lang="scss" scoped>
.filters-wrap {
padding: var(--space-normal);
border-radius: var(--border-radius-large);
border: 1px solid var(--color-border);
background: var(--color-background-light);
margin-bottom: var(--space-normal);
}
.filter-actions {
margin-top: var(--space-normal);
}
.event_wrapper {
select {
margin: var(--space-zero);
@apply m-0;
}
.info-message {
font-size: var(--font-size-mini);
color: var(--s-500);
text-align: right;
@apply text-xs text-green-500 dark:text-green-500 text-right;
}
margin-bottom: var(--space-medium);
@apply mb-6;
}
</style>
@@ -1,5 +1,5 @@
<template>
<div class="column content-box">
<div class="flex-1 overflow-auto p-4">
<woot-button
color-scheme="success"
class-names="button--fixed-top"
@@ -8,8 +8,8 @@
>
{{ $t('AUTOMATION.HEADER_BTN_TXT') }}
</woot-button>
<div class="row">
<div class="small-8 columns with-right-space">
<div class="flex flex-row gap-4">
<div class="w-[60%]">
<p
v-if="!uiFlags.isFetching && !records.length"
class="no-items-error-message"
@@ -77,7 +77,7 @@
</table>
</div>
<div class="small-4 columns">
<div class="w-[34%]">
<span v-dompurify-html="$t('AUTOMATION.SIDEBAR_TXT')" />
</div>
</div>
@@ -277,9 +277,3 @@ export default {
},
};
</script>
<style scoped>
.automation__status-checkbox {
margin: 0;
}
</style>
@@ -1,10 +1,10 @@
<template>
<div class="columns profile--settings">
<div class="overflow-auto flex-1 p-6 dark:bg-slate-900">
<woot-loading-state v-if="uiFlags.isFetchingItem" />
<div v-else-if="!hasABillingPlan">
<p>{{ $t('BILLING_SETTINGS.NO_BILLING_USER') }}</p>
</div>
<div v-else class="small-12 columns ">
<div v-else class="w-full">
<div class="current-plan--details">
<h6>{{ $t('BILLING_SETTINGS.CURRENT_PLAN.TITLE') }}</h6>
<div
@@ -42,7 +42,7 @@ import { mapGetters } from 'vuex';
import alertMixin from 'shared/mixins/alertMixin';
import accountMixin from '../../../../mixins/account';
import BillingItem from './components/BillingItem.vue';
// sdds
export default {
components: { BillingItem },
mixins: [accountMixin, alertMixin, messageFormatterMixin],
@@ -92,25 +92,28 @@ export default {
<style lang="scss">
.manage-subscription {
align-items: center;
background: var(--white);
border-radius: var(--border-radius-normal);
border: 1px solid var(--color-border);
display: flex;
justify-content: space-between;
margin-bottom: var(--space-small);
padding: var(--space-medium) var(--space-normal);
@apply bg-white dark:bg-slate-800 flex justify-between mb-2 py-6 px-4 items-center rounded-md border border-solid border-slate-75 dark:border-slate-700;
}
.current-plan--details {
border-bottom: 1px solid var(--color-border);
margin-bottom: var(--space-normal);
padding-bottom: var(--space-normal);
@apply border-b border-solid border-slate-75 dark:border-slate-800 mb-4 pb-4;
h6 {
@apply text-slate-800 dark:text-slate-100;
}
p {
@apply text-slate-600 dark:text-slate-200;
}
}
.manage-subscription {
.manage-subscription--description {
margin-bottom: 0;
@apply mb-0 text-slate-600 dark:text-slate-200;
}
h6 {
@apply text-slate-800 dark:text-slate-100;
}
}
</style>
@@ -1,11 +1,11 @@
<template>
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header
:header-title="$t('CAMPAIGN.ADD.TITLE')"
:header-content="$t('CAMPAIGN.ADD.DESC')"
/>
<form class="row" @submit.prevent="addCampaign">
<div class="medium-12 columns">
<form class="flex flex-col w-full" @submit.prevent="addCampaign">
<div class="w-full">
<woot-input
v-model="title"
:label="$t('CAMPAIGN.ADD.FORM.TITLE.LABEL')"
@@ -158,7 +158,7 @@
</label>
</div>
<div class="modal-footer">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button :is-loading="uiFlags.isCreating">
{{ $t('CAMPAIGN.ADD.CREATE_BUTTON_TEXT') }}
</woot-button>
@@ -367,4 +367,14 @@ export default {
::v-deep .ProseMirror-woot-style {
height: 5rem;
}
.message-editor {
@apply px-3;
::v-deep {
.ProseMirror-menubar {
@apply rounded-tl-[4px];
}
}
}
</style>
@@ -1,5 +1,5 @@
<template>
<div class="column content-box">
<div class="flex-1 overflow-auto p-4">
<campaigns-table
:campaigns="campaigns"
:show-empty-result="showEmptyResult"
@@ -101,12 +101,6 @@ export default {
<style scoped lang="scss">
.button-wrapper {
display: flex;
justify-content: flex-end;
padding-bottom: var(--space-one);
}
.content-box .page-top-bar::v-deep {
padding: var(--space-large) var(--space-large) var(--space-zero);
@apply flex justify-end pb-2.5;
}
</style>
@@ -7,8 +7,9 @@
scroll-width="190rem"
:table-data="tableData"
:border-around="true"
style="max-width: calc(100vw - 18rem)"
/>
<div v-if="isLoading" class="campaign--loader">
<div v-if="isLoading" class="items-center flex text-base justify-center">
<spinner />
<span>{{ $t('CAMPAIGN.LIST.LOADING_MESSAGE') }}</span>
</div>
@@ -108,7 +109,9 @@ export default {
align: this.isRTLView ? 'right' : 'left',
renderBodyCell: ({ row }) => (
<div class="row--title-block">
<h6 class="sub-block-title title text-truncate">{row.title}</h6>
<h6 class="text-sm m-0 capitalize text-slate-900 dark:text-slate-100 overflow-hidden whitespace-nowrap text-ellipsis">
{row.title}
</h6>
</div>
),
},
@@ -122,7 +125,7 @@ export default {
renderBodyCell: ({ row }) => {
if (row.message) {
return (
<div class="text-truncate">
<div class="overflow-hidden whitespace-nowrap text-ellipsis">
<span
domPropsInnerHTML={this.formatMessage(row.message)}
></span>
@@ -174,7 +177,7 @@ export default {
title: this.$t('CAMPAIGN.LIST.TABLE_HEADER.URL'),
align: this.isRTLView ? 'right' : 'left',
renderBodyCell: ({ row }) => (
<div class="text-truncate">
<div class="overflow-hidden whitespace-nowrap text-ellipsis">
<a
target="_blank"
rel="noopener noreferrer nofollow"
@@ -199,7 +202,7 @@ export default {
title: '',
align: this.isRTLView ? 'right' : 'left',
renderBodyCell: row => (
<div class="button-wrapper">
<div class="justify-evenly flex flex-row min-w-[12.5rem]">
<WootButton
variant="clear"
icon="edit"
@@ -251,7 +254,7 @@ export default {
title: '',
align: this.isRTLView ? 'right' : 'left',
renderBodyCell: row => (
<div class="button-wrapper">
<div class="justify-evenly flex flex-row min-w-[12.5rem]">
<WootButton
variant="link"
icon="dismiss-circle"
@@ -272,48 +275,25 @@ export default {
<style lang="scss" scoped>
.campaigns-table-wrap::v-deep {
.ve-table {
padding-bottom: var(--space-large);
@apply pb-12;
thead.ve-table-header .ve-table-header-tr .ve-table-header-th {
font-size: var(--font-size-mini);
padding: var(--space-small) var(--space-two);
@apply text-xs py-2 px-5;
}
tbody.ve-table-body .ve-table-body-tr .ve-table-body-td {
padding: var(--space-slab) var(--space-two);
@apply py-3 px-5;
.inbox--name {
margin: 0;
@apply m-0;
}
}
}
.row--title-block {
align-items: center;
display: flex;
text-align: left;
.title {
font-size: var(--font-size-small);
margin: 0;
text-transform: capitalize;
}
@apply items-center flex text-left;
}
.label {
padding: var(--space-smaller) var(--space-small);
@apply py-1 px-2;
}
}
.campaign--loader {
align-items: center;
display: flex;
font-size: var(--font-size-default);
justify-content: center;
padding: var(--space-big);
}
.button-wrapper {
justify-content: space-evenly;
display: flex;
flex-direction: row;
min-width: 12.5rem;
}
</style>
@@ -1,8 +1,8 @@
<template>
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header :header-title="pageTitle" />
<form class="row" @submit.prevent="editCampaign">
<div class="medium-12 columns">
<form class="flex flex-col w-full" @submit.prevent="editCampaign">
<div class="w-full">
<woot-input
v-model="title"
:label="$t('CAMPAIGN.ADD.FORM.TITLE.LABEL')"
@@ -97,7 +97,7 @@
{{ $t('CAMPAIGN.ADD.FORM.TRIGGER_ONLY_BUSINESS_HOURS') }}
</label>
</div>
<div class="modal-footer">
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-button :is-loading="uiFlags.isCreating">
{{ $t('CAMPAIGN.EDIT.UPDATE_BUTTON_TEXT') }}
</woot-button>
@@ -283,4 +283,14 @@ export default {
::v-deep .ProseMirror-woot-style {
height: 5rem;
}
.message-editor {
@apply px-3;
::v-deep {
.ProseMirror-menubar {
@apply rounded-tl-[4px];
}
}
}
</style>
@@ -1,5 +1,5 @@
<template>
<div class="column content-box">
<div class="flex-1 overflow-auto p-4">
<woot-button
color-scheme="success"
class-names="button--fixed-top"
@@ -1,12 +1,12 @@
<template>
<modal :show.sync="show" :on-close="onClose">
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header
:header-title="$t('CANNED_MGMT.ADD.TITLE')"
:header-content="$t('CANNED_MGMT.ADD.DESC')"
/>
<form class="row" @submit.prevent="addCannedResponse()">
<div class="medium-12 columns">
<form class="flex flex-col w-full" @submit.prevent="addCannedResponse()">
<div class="w-full">
<label :class="{ error: $v.shortCode.$error }">
{{ $t('CANNED_MGMT.ADD.FORM.SHORT_CODE.LABEL') }}
<input
@@ -18,7 +18,7 @@
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<label :class="{ error: $v.content.$error }">
{{ $t('CANNED_MGMT.ADD.FORM.CONTENT.LABEL') }}
</label>
@@ -34,21 +34,19 @@
/>
</div>
</div>
<div class="modal-footer">
<div class="medium-12 columns">
<woot-submit-button
:disabled="
$v.content.$invalid ||
$v.shortCode.$invalid ||
addCanned.showLoading
"
:button-text="$t('CANNED_MGMT.ADD.FORM.SUBMIT')"
:loading="addCanned.showLoading"
/>
<button class="button clear" @click.prevent="onClose">
{{ $t('CANNED_MGMT.ADD.CANCEL_BUTTON_TEXT') }}
</button>
</div>
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-submit-button
:disabled="
$v.content.$invalid ||
$v.shortCode.$invalid ||
addCanned.showLoading
"
:button-text="$t('CANNED_MGMT.ADD.FORM.SUBMIT')"
:loading="addCanned.showLoading"
/>
<button class="button clear" @click.prevent="onClose">
{{ $t('CANNED_MGMT.ADD.CANCEL_BUTTON_TEXT') }}
</button>
</div>
</form>
</div>
@@ -137,19 +135,15 @@ export default {
<style scoped lang="scss">
::v-deep {
.ProseMirror-menubar {
display: none;
@apply hidden;
}
.ProseMirror-woot-style {
min-height: 12.5rem;
@apply min-h-[12.5rem];
p {
font-size: var(--font-size-default);
@apply text-base;
}
}
.message-editor {
border: 1px solid var(--s-200);
}
}
</style>
@@ -1,9 +1,9 @@
<template>
<modal :show.sync="show" :on-close="onClose">
<div class="column content-box">
<div class="h-auto overflow-auto flex flex-col">
<woot-modal-header :header-title="pageTitle" />
<form class="row medium-8" @submit.prevent="editCannedResponse()">
<div class="medium-12 columns">
<form class="flex flex-col w-full" @submit.prevent="editCannedResponse()">
<div class="w-full">
<label :class="{ error: $v.shortCode.$error }">
{{ $t('CANNED_MGMT.EDIT.FORM.SHORT_CODE.LABEL') }}
<input
@@ -15,7 +15,7 @@
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<label :class="{ error: $v.content.$error }">
{{ $t('CANNED_MGMT.EDIT.FORM.CONTENT.LABEL') }}
</label>
@@ -31,21 +31,19 @@
/>
</div>
</div>
<div class="modal-footer">
<div class="medium-12 columns">
<woot-submit-button
:disabled="
$v.content.$invalid ||
$v.shortCode.$invalid ||
editCanned.showLoading
"
:button-text="$t('CANNED_MGMT.EDIT.FORM.SUBMIT')"
:loading="editCanned.showLoading"
/>
<button class="button clear" @click.prevent="onClose">
{{ $t('CANNED_MGMT.EDIT.CANCEL_BUTTON_TEXT') }}
</button>
</div>
<div class="flex flex-row justify-end gap-2 py-2 px-0 w-full">
<woot-submit-button
:disabled="
$v.content.$invalid ||
$v.shortCode.$invalid ||
editCanned.showLoading
"
:button-text="$t('CANNED_MGMT.EDIT.FORM.SUBMIT')"
:loading="editCanned.showLoading"
/>
<button class="button clear" @click.prevent="onClose">
{{ $t('CANNED_MGMT.EDIT.CANCEL_BUTTON_TEXT') }}
</button>
</div>
</form>
</div>
@@ -141,19 +139,15 @@ export default {
<style scoped lang="scss">
::v-deep {
.ProseMirror-menubar {
display: none;
@apply hidden;
}
.ProseMirror-woot-style {
min-height: 12.5rem;
@apply min-h-[12.5rem];
p {
font-size: var(--font-size-default);
@apply text-base;
}
}
.message-editor {
border: 1px solid var(--s-200);
}
}
</style>
@@ -1,5 +1,5 @@
<template>
<div class="column content-box">
<div class="flex-1 overflow-auto p-4">
<woot-button
color-scheme="success"
class-names="button--fixed-top"
@@ -10,8 +10,8 @@
</woot-button>
<!-- List Canned Response -->
<div class="row">
<div class="small-8 columns with-right-space ">
<div class="flex flex-row gap-4">
<div class="w-[60%]">
<p
v-if="!uiFlags.fetchingList && !records.length"
class="no-items-error-message"
@@ -42,11 +42,13 @@
:key="cannedItem.short_code"
>
<!-- Short Code -->
<td class="short-code">
<td class="w-[8.75rem]">
{{ cannedItem.short_code }}
</td>
<!-- Content -->
<td class="wrap-break-words">{{ cannedItem.content }}</td>
<td class="break-all whitespace-normal">
{{ cannedItem.content }}
</td>
<!-- Action Buttons -->
<td class="button-wrapper">
<woot-button
@@ -73,7 +75,7 @@
</table>
</div>
<div class="small-4 columns">
<div class="w-[34%]">
<span v-dompurify-html="$t('CANNED_MGMT.SIDEBAR_TXT')" />
</div>
</div>
@@ -207,12 +209,3 @@ export default {
},
};
</script>
<style scoped>
.short-code {
width: 8.75rem;
}
.wrap-break-words {
word-break: break-all;
white-space: normal;
}
</style>
@@ -1,14 +1,14 @@
<template>
<div class="wizard-body columns content-box small-9">
<form class="row" @submit.prevent="addAgents()">
<div class="medium-12 columns">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%]">
<form class="mx-0 flex flex-wrap" @submit.prevent="addAgents()">
<div class="w-full">
<page-header
:header-title="$t('INBOX_MGMT.ADD.AGENTS.TITLE')"
:header-content="$t('INBOX_MGMT.ADD.AGENTS.DESC')"
/>
</div>
<div class="medium-7 columns">
<div class="medium-12 columns">
<div class="w-[60%]">
<div class="w-full">
<label :class="{ error: $v.selectedAgents.$error }">
{{ $t('INBOX_MGMT.ADD.AGENTS.TITLE') }}
<multiselect
@@ -31,7 +31,7 @@
</span>
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<woot-submit-button
:button-text="$t('INBOX_MGMT.AGENTS.BUTTON_TEXT')"
:loading="isCreating"
@@ -1,5 +1,5 @@
<template>
<div class="wizard-body small-12 medium-9 columns height-auto">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%] h-auto">
<page-header
:header-title="$t('INBOX_MGMT.ADD.AUTH.TITLE')"
:header-content="
@@ -9,7 +9,7 @@
)
"
/>
<div class="row channel-list">
<div class="mt-6 mx-0 flex flex-wrap">
<channel-item
v-for="channel in channelList"
:key="channel.key"
@@ -1,30 +1,30 @@
<template>
<div class="wizard-body columns content-box small-9">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%]">
<empty-state
:title="$t('INBOX_MGMT.FINISH.TITLE')"
:message="message"
:button-text="$t('INBOX_MGMT.FINISH.BUTTON_TEXT')"
>
<div class="medium-12 columns text-center">
<div class="website--code">
<div class="w-full text-center">
<div class="my-4 mx-auto max-w-[70%]">
<woot-code
v-if="currentInbox.web_widget_script"
:script="currentInbox.web_widget_script"
/>
</div>
<div class="medium-6 small-offset-3">
<div class="w-[50%] max-w-[50%] ml-[25%]">
<woot-code
v-if="isATwilioInbox"
lang="html"
:script="currentInbox.callback_webhook_url"
/>
</div>
<div v-if="isWhatsAppCloudInbox" class="medium-6 small-offset-3">
<p class="config--label">
<div v-if="isWhatsAppCloudInbox" class="w-[50%] max-w-[50%] ml-[25%]">
<p class="text-slate-700 dark:text-slate-200 font-medium mt-8">
{{ $t('INBOX_MGMT.ADD.WHATSAPP.API_CALLBACK.WEBHOOK_URL') }}
</p>
<woot-code lang="html" :script="currentInbox.callback_webhook_url" />
<p class="config--label">
<p class="text-slate-700 dark:text-slate-200 font-medium mt-8">
{{
$t(
'INBOX_MGMT.ADD.WHATSAPP.API_CALLBACK.WEBHOOK_VERIFICATION_TOKEN'
@@ -36,14 +36,14 @@
:script="currentInbox.provider_config.webhook_verify_token"
/>
</div>
<div class="medium-6 small-offset-3">
<div class="w-[50%] max-w-[50%] ml-[25%]">
<woot-code
v-if="isALineInbox"
lang="html"
:script="currentInbox.callback_webhook_url"
/>
</div>
<div class="medium-6 small-offset-3">
<div class="w-[50%] max-w-[50%] ml-[25%]">
<woot-code
v-if="isASmsInbox"
lang="html"
@@ -52,13 +52,13 @@
</div>
<div
v-if="isAEmailInbox && !currentInbox.provider"
class="medium-6 small-offset-3"
class="w-[50%] max-w-[50%] ml-[25%]"
>
<woot-code lang="html" :script="currentInbox.forward_to_email" />
</div>
<div class="footer">
<div class="flex justify-center gap-2 mt-4">
<router-link
class="button hollow primary settings-button"
class="button hollow primary"
:to="{
name: 'settings_inbox_show',
params: { inboxId: this.$route.params.inbox_id },
@@ -152,26 +152,3 @@ export default {
},
};
</script>
<style lang="scss" scoped>
@import '~dashboard/assets/scss/variables';
.website--code {
margin: $space-normal auto;
max-width: 70%;
}
.footer {
display: flex;
justify-content: center;
}
.settings-button {
margin-right: var(--space-small);
}
.config--label {
color: var(--b-600);
font-weight: var(--font-weight-medium);
margin-top: var(--space-large);
}
</style>
@@ -1,7 +1,9 @@
<template>
<div class="row content-box full-height">
<div
class="flex flex-row overflow-auto p-4 h-full bg-slate-25 dark:bg-slate-800"
>
<woot-wizard
class="hide-for-small-only medium-3 columns"
class="hide-for-small-only w-[25%]"
:global-config="globalConfig"
:items="items"
/>
@@ -1,8 +1,8 @@
<template>
<div class="column content-box">
<div class="flex-1 overflow-auto p-4">
<!-- List Canned Response -->
<div class="row">
<div class="small-8 columns with-right-space">
<div class="flex flex-row gap-4">
<div class="w-[60%]">
<p v-if="!inboxesList.length" class="no-items-error-message">
{{ $t('INBOX_MGMT.LIST.404') }}
<router-link
@@ -98,7 +98,7 @@
</table>
</div>
<div class="small-4 columns">
<div class="w-[34%]">
<span
v-dompurify-html="
useInstallationName(
@@ -76,27 +76,25 @@ export default {
</script>
<style scoped lang="scss">
.pre-chat-field {
padding: var(--space-normal) var(--space-small);
@apply py-4 px-2 text-slate-700 dark:text-slate-100;
svg {
display: flex;
align-items: center;
@apply flex items-center;
}
}
.disabled-text {
color: var(--s-500);
@apply text-slate-500 dark:text-slate-400;
}
table {
thead th {
text-transform: none;
@apply normal-case;
}
input {
font-size: var(--font-size-small);
margin-bottom: 0;
@apply text-sm mb-0;
}
}
checkbox {
margin: 0;
@apply m-0;
}
</style>
@@ -1,10 +1,10 @@
<template>
<div class="settings--content">
<div class="pre-chat--title">
<div class="my-2 mx-8 text-base">
<div class="mt-6 mx-0 mb-3">
{{ $t('INBOX_MGMT.PRE_CHAT_FORM.DESCRIPTION') }}
</div>
<form @submit.prevent="updateInbox">
<label class="medium-3 columns">
<form class="flex flex-col" @submit.prevent="updateInbox">
<label class="w-[25%]">
{{ $t('INBOX_MGMT.PRE_CHAT_FORM.ENABLE.LABEL') }}
<select v-model="preChatFormEnabled">
<option :value="true">
@@ -16,7 +16,7 @@
</select>
</label>
<div v-if="preChatFormEnabled">
<label class="columns medium-8 large-8">
<label class="w-[70%]">
<label>
{{ $t('INBOX_MGMT.PRE_CHAT_FORM.PRE_CHAT_MESSAGE.LABEL') }}
</label>
@@ -28,7 +28,7 @@
"
/>
</label>
<div class="columns medium-8 large-8 pre-chat-fields">
<div class="w-[70%] mt-4">
<label>{{ $t('INBOX_MGMT.PRE_CHAT_FORM.SET_FIELDS') }}</label>
<table class="table table-striped w-full">
<thead class="thead-dark">
@@ -66,13 +66,14 @@
</table>
</div>
</div>
<woot-submit-button
class="submit-button"
:button-text="
$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE_PRE_CHAT_FORM_SETTINGS')
"
:loading="uiFlags.isUpdating"
/>
<div class="my-4 w-auto">
<woot-submit-button
:button-text="
$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE_PRE_CHAT_FORM_SETTINGS')
"
:loading="uiFlags.isUpdating"
/>
</div>
</form>
</div>
</template>
@@ -171,17 +172,13 @@ export default {
};
</script>
<style scoped lang="scss">
.settings--content {
font-size: var(--font-size-default);
}
.pre-chat--title {
margin: var(--space-medium) 0 var(--space-slab);
}
.message-editor {
@apply px-3;
.submit-button {
margin-top: var(--space-normal);
}
.pre-chat-fields {
margin-top: var(--space-normal);
::v-deep {
.ProseMirror-menubar {
@apply rounded-tl-[4px];
}
}
}
</style>
@@ -1,5 +1,7 @@
<template>
<div class="settings columns container">
<div
class="settings bg-white dark:bg-slate-800 flex-grow flex-shrink pr-0 pl-0 overflow-auto min-w-0 w-full"
>
<setting-intro-banner
:header-image="inbox.avatarUrl"
:header-title="inboxName"
@@ -28,14 +30,14 @@
<woot-avatar-uploader
:label="$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_AVATAR.LABEL')"
:src="avatarUrl"
class="settings-item"
class="pb-4"
delete-avatar
@change="handleImageUpload"
@onAvatarDelete="handleAvatarDelete"
/>
<woot-input
v-model.trim="selectedInboxName"
class="medium-9 columns settings-item"
class="w-[75%] pb-4"
:class="{ error: $v.selectedInboxName.$error }"
:label="inboxNameLabel"
:placeholder="inboxNamePlaceHolder"
@@ -61,7 +63,7 @@
<woot-input
v-if="isAPIInbox"
v-model.trim="webhookUrl"
class="medium-9 columns settings-item"
class="w-[75%] pb-4"
:class="{ error: $v.webhookUrl.$error }"
:label="
$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WEBHOOK_URL.LABEL')
@@ -79,7 +81,7 @@
<woot-input
v-if="isAWebWidgetInbox"
v-model.trim="channelWebsiteUrl"
class="medium-9 columns settings-item"
class="w-[75%] pb-4"
:label="$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_DOMAIN.LABEL')"
:placeholder="
$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_DOMAIN.PLACEHOLDER')
@@ -88,7 +90,7 @@
<woot-input
v-if="isAWebWidgetInbox"
v-model.trim="channelWelcomeTitle"
class="medium-9 columns settings-item"
class="w-[75%] pb-4"
:label="
$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TITLE.LABEL')
"
@@ -102,7 +104,7 @@
<woot-input
v-if="isAWebWidgetInbox"
v-model.trim="channelWelcomeTagline"
class="medium-9 columns settings-item"
class="w-[75%] pb-4"
:label="
$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TAGLINE.LABEL')
"
@@ -113,17 +115,17 @@
"
/>
<label v-if="isAWebWidgetInbox" class="medium-9 columns settings-item">
<label v-if="isAWebWidgetInbox" class="w-[75%] pb-4">
{{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.WIDGET_COLOR.LABEL') }}
<woot-color-picker v-model="inbox.widget_color" />
</label>
<label v-if="isAWhatsAppChannel" class="medium-9 columns settings-item">
<label v-if="isAWhatsAppChannel" class="w-[75%] pb-4">
{{ $t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.LABEL') }}
<input v-model="whatsAppAPIProviderName" type="text" disabled />
</label>
<label class="medium-9 columns settings-item">
<label class="w-[75%] pb-4">
{{
$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.LABEL')
}}
@@ -143,7 +145,7 @@
}}
</option>
</select>
<p class="help-text">
<p class="text-slate-600 dark:text-slate-400 pb-1 text-sm not-italic">
{{
$t(
'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.HELP_TEXT'
@@ -151,7 +153,7 @@
}}
</p>
</label>
<div v-if="greetingEnabled" class="settings-item">
<div v-if="greetingEnabled" class="pb-4">
<greetings-editor
v-model.trim="greetingMessage"
:label="
@@ -167,7 +169,7 @@
:richtext="!textAreaChannels"
/>
</div>
<label v-if="isAWebWidgetInbox" class="medium-9 columns settings-item">
<label v-if="isAWebWidgetInbox" class="w-[75%] pb-4">
{{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.REPLY_TIME.TITLE') }}
<select v-model="replyTime">
<option key="in_a_few_minutes" value="in_a_few_minutes">
@@ -185,12 +187,12 @@
</option>
</select>
<p class="help-text">
<p class="text-slate-600 dark:text-slate-400 pb-1 text-sm not-italic">
{{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.REPLY_TIME.HELP_TEXT') }}
</p>
</label>
<label v-if="isAWebWidgetInbox" class="medium-9 columns settings-item">
<label v-if="isAWebWidgetInbox" class="w-[75%] pb-4">
{{ $t('INBOX_MGMT.SETTINGS_POPUP.ENABLE_EMAIL_COLLECT_BOX') }}
<select v-model="emailCollectEnabled">
<option :value="true">
@@ -200,14 +202,14 @@
{{ $t('INBOX_MGMT.EDIT.EMAIL_COLLECT_BOX.DISABLED') }}
</option>
</select>
<p class="help-text">
<p class="text-slate-600 dark:text-slate-400 pb-1 text-sm not-italic">
{{
$t('INBOX_MGMT.SETTINGS_POPUP.ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT')
}}
</p>
</label>
<label class="medium-9 columns settings-item">
<label class="w-[75%] pb-4">
{{ $t('INBOX_MGMT.SETTINGS_POPUP.ENABLE_CSAT') }}
<select v-model="csatSurveyEnabled">
<option :value="true">
@@ -217,12 +219,12 @@
{{ $t('INBOX_MGMT.EDIT.ENABLE_CSAT.DISABLED') }}
</option>
</select>
<p class="help-text">
<p class="text-slate-600 dark:text-slate-400 pb-1 text-sm not-italic">
{{ $t('INBOX_MGMT.SETTINGS_POPUP.ENABLE_CSAT_SUB_TEXT') }}
</p>
</label>
<label v-if="isAWebWidgetInbox" class="medium-9 columns settings-item">
<label v-if="isAWebWidgetInbox" class="w-[75%] pb-4">
{{ $t('INBOX_MGMT.SETTINGS_POPUP.ALLOW_MESSAGES_AFTER_RESOLVED') }}
<select v-model="allowMessagesAfterResolved">
<option :value="true">
@@ -232,7 +234,7 @@
{{ $t('INBOX_MGMT.EDIT.ALLOW_MESSAGES_AFTER_RESOLVED.DISABLED') }}
</option>
</select>
<p class="help-text">
<p class="text-slate-600 dark:text-slate-400 pb-1 text-sm not-italic">
{{
$t(
'INBOX_MGMT.SETTINGS_POPUP.ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT'
@@ -241,7 +243,7 @@
</p>
</label>
<label v-if="isAWebWidgetInbox" class="medium-9 columns settings-item">
<label v-if="isAWebWidgetInbox" class="w-[75%] pb-4">
{{ $t('INBOX_MGMT.SETTINGS_POPUP.ENABLE_CONTINUITY_VIA_EMAIL') }}
<select v-model="continuityViaEmail">
<option :value="true">
@@ -251,7 +253,7 @@
{{ $t('INBOX_MGMT.EDIT.ENABLE_CONTINUITY_VIA_EMAIL.DISABLED') }}
</option>
</select>
<p class="help-text">
<p class="text-slate-600 dark:text-slate-400 pb-1 text-sm not-italic">
{{
$t(
'INBOX_MGMT.SETTINGS_POPUP.ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT'
@@ -259,7 +261,7 @@
}}
</p>
</label>
<div class="medium-9 settings-item">
<div class="w-[75%] pb-4">
<label>
{{ $t('INBOX_MGMT.HELP_CENTER.LABEL') }}
</label>
@@ -271,14 +273,11 @@
{{ p.name }}
</option>
</select>
<p class="help-text">
<p class="text-slate-600 dark:text-slate-400 pb-1 text-sm not-italic">
{{ $t('INBOX_MGMT.HELP_CENTER.SUB_TEXT') }}
</p>
</div>
<label
v-if="canLocktoSingleConversation"
class="medium-9 columns settings-item"
>
<label v-if="canLocktoSingleConversation" class="w-[75%] pb-4">
{{ $t('INBOX_MGMT.SETTINGS_POPUP.LOCK_TO_SINGLE_CONVERSATION') }}
<select v-model="locktoSingleConversation">
<option :value="true">
@@ -288,7 +287,7 @@
{{ $t('INBOX_MGMT.EDIT.LOCK_TO_SINGLE_CONVERSATION.DISABLED') }}
</option>
</select>
<p class="help-text">
<p class="text-slate-600 dark:text-slate-400 pb-1 text-sm not-italic">
{{
$t(
'INBOX_MGMT.SETTINGS_POPUP.LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT'
@@ -300,10 +299,7 @@
<label v-if="isAWebWidgetInbox">
{{ $t('INBOX_MGMT.FEATURES.LABEL') }}
</label>
<div
v-if="isAWebWidgetInbox"
class="widget--feature-flag settings-item"
>
<div v-if="isAWebWidgetInbox" class="pt-2 pb-4">
<input
v-model="selectedFeatureFlags"
type="checkbox"
@@ -314,7 +310,7 @@
{{ $t('INBOX_MGMT.FEATURES.DISPLAY_FILE_PICKER') }}
</label>
</div>
<div v-if="isAWebWidgetInbox" class="settings-item">
<div v-if="isAWebWidgetInbox" class="pb-4">
<input
v-model="selectedFeatureFlags"
type="checkbox"
@@ -325,7 +321,7 @@
{{ $t('INBOX_MGMT.FEATURES.DISPLAY_EMOJI_PICKER') }}
</label>
</div>
<div v-if="isAWebWidgetInbox" class="settings-item">
<div v-if="isAWebWidgetInbox" class="pb-4">
<input
v-model="selectedFeatureFlags"
type="checkbox"
@@ -336,7 +332,7 @@
{{ $t('INBOX_MGMT.FEATURES.ALLOW_END_CONVERSATION') }}
</label>
</div>
<div v-if="isAWebWidgetInbox" class="settings-item">
<div v-if="isAWebWidgetInbox" class="pb-4">
<input
v-model="selectedFeatureFlags"
type="checkbox"
@@ -354,13 +350,13 @@
:sub-title="$t('INBOX_MGMT.EDIT.SENDER_NAME_SECTION.SUB_TEXT')"
:show-border="false"
>
<div class="medium-9 settings-item">
<div class="w-[75%] pb-4">
<sender-name-example-preview
:sender-name-type="senderNameType"
:business-name="businessName"
@update="toggleSenderNameType"
/>
<div class="business-section">
<div class="flex flex-col items-start gap-2 mt-2">
<woot-button
variant="clear"
color-scheme="primary"
@@ -372,7 +368,7 @@
)
}}
</woot-button>
<div v-if="showBusinessNameInput" class="business-name-input">
<div v-if="showBusinessNameInput" class="flex gap-2 w-[80%]">
<input
ref="businessNameInput"
v-model="businessName"
@@ -381,6 +377,7 @@
'INBOX_MGMT.EDIT.SENDER_NAME_SECTION.BUSINESS_NAME.PLACEHOLDER'
)
"
class="mb-0"
type="text"
/>
<woot-button color-scheme="primary" @click="updateInbox">
@@ -773,52 +770,10 @@ export default {
</script>
<style scoped lang="scss">
@import '~dashboard/assets/scss/variables';
@import '~dashboard/assets/scss/mixins';
.settings {
background: $color-white;
.settings--tabs {
::v-deep .tabs {
padding: 0;
}
}
.tabs {
padding: 0;
margin-bottom: -1px;
}
}
.widget--feature-flag {
padding-top: var(--space-small);
}
.settings-item {
padding-bottom: var(--space-normal);
.help-text {
font-style: normal;
color: var(--b-500);
padding-bottom: var(--space-smaller);
}
}
.business-section {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: var(--space-small);
margin-top: var(--space-small);
.business-name-input {
display: flex;
gap: var(--space-small);
width: 80%;
input {
margin-bottom: 0;
@apply p-0;
}
}
}
@@ -448,7 +448,7 @@ export default {
min-height: 40.625rem;
margin: var(--space-zero) var(--space-two) var(--space-two) var(--space-two);
padding: var(--space-one) var(--space-one) var(--space-one) var(--space-one);
background: var(--s-50);
@apply bg-slate-50 dark:bg-slate-700;
@include breakpoint(500px down) {
background: none;
@@ -1,6 +1,6 @@
<template>
<form class="row" @submit.prevent="createChannel()">
<div class="medium-8 columns">
<form class="mx-0 flex flex-wrap" @submit.prevent="createChannel()">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.inboxName.$error }">
{{ $t('INBOX_MGMT.ADD.WHATSAPP.INBOX_NAME.LABEL') }}
<input
@@ -15,7 +15,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.phoneNumber.$error }">
{{ $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER.LABEL') }}
<input
@@ -30,7 +30,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.apiKey.$error }">
<span>
{{ $t('INBOX_MGMT.ADD.WHATSAPP.API_KEY.LABEL') }}
@@ -47,7 +47,7 @@
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<woot-submit-button
:loading="uiFlags.isCreating"
:button-text="$t('INBOX_MGMT.ADD.WHATSAPP.SUBMIT_BUTTON')"
@@ -1,11 +1,11 @@
<template>
<div class="wizard-body small-9 columns">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%]">
<page-header
:header-title="$t('INBOX_MGMT.ADD.API_CHANNEL.TITLE')"
:header-content="$t('INBOX_MGMT.ADD.API_CHANNEL.DESC')"
/>
<form class="row" @submit.prevent="createChannel()">
<div class="medium-8 columns">
<form class="mx-0 flex flex-wrap" @submit.prevent="createChannel()">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.channelName.$error }">
{{ $t('INBOX_MGMT.ADD.API_CHANNEL.CHANNEL_NAME.LABEL') }}
<input
@@ -22,7 +22,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.webhookUrl.$error }">
{{ $t('INBOX_MGMT.ADD.API_CHANNEL.WEBHOOK_URL.LABEL') }}
<input
@@ -39,7 +39,7 @@
</p>
</div>
<div class="medium-12 columns">
<div class="w-full">
<woot-submit-button
:loading="uiFlags.isCreating"
:button-text="$t('INBOX_MGMT.ADD.API_CHANNEL.SUBMIT_BUTTON')"
@@ -1,6 +1,6 @@
<template>
<form class="row" @submit.prevent="createChannel()">
<div class="medium-8 columns">
<form class="mx-0 flex flex-wrap" @submit.prevent="createChannel()">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.inboxName.$error }">
{{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.INBOX_NAME.LABEL') }}
<input
@@ -17,7 +17,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.phoneNumber.$error }">
{{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.PHONE_NUMBER.LABEL') }}
<input
@@ -34,7 +34,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.accountId.$error }">
{{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.ACCOUNT_ID.LABEL') }}
<input
@@ -51,7 +51,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.applicationId.$error }">
{{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.APPLICATION_ID.LABEL') }}
<input
@@ -68,7 +68,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.apiKey.$error }">
{{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.API_KEY.LABEL') }}
<input
@@ -83,7 +83,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.apiSecret.$error }">
{{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.API_SECRET.LABEL') }}
<input
@@ -100,7 +100,7 @@
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<woot-submit-button
:loading="uiFlags.isCreating"
:button-text="$t('INBOX_MGMT.ADD.SMS.BANDWIDTH.SUBMIT_BUTTON')"
@@ -1,6 +1,6 @@
<template>
<form class="row" @submit.prevent="createChannel()">
<div class="medium-8 columns">
<form class="mx-0 flex flex-wrap" @submit.prevent="createChannel()">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.inboxName.$error }">
{{ $t('INBOX_MGMT.ADD.WHATSAPP.INBOX_NAME.LABEL') }}
<input
@@ -15,7 +15,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.phoneNumber.$error }">
{{ $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER.LABEL') }}
<input
@@ -30,7 +30,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.phoneNumberId.$error }">
<span>
{{ $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER_ID.LABEL') }}
@@ -49,7 +49,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.businessAccountId.$error }">
<span>
{{ $t('INBOX_MGMT.ADD.WHATSAPP.BUSINESS_ACCOUNT_ID.LABEL') }}
@@ -68,7 +68,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.apiKey.$error }">
<span>
{{ $t('INBOX_MGMT.ADD.WHATSAPP.API_KEY.LABEL') }}
@@ -85,7 +85,7 @@
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<woot-submit-button
:loading="uiFlags.isCreating"
:button-text="$t('INBOX_MGMT.ADD.WHATSAPP.SUBMIT_BUTTON')"
@@ -1,6 +1,6 @@
<template>
<div class="wizard-body columns content-box small-9">
<div v-if="!hasLoginStarted" class="login-init full-height">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%]">
<div v-if="!hasLoginStarted" class="login-init h-full">
<a href="#" @click="startLogin()">
<img
src="~dashboard/assets/images/channels/facebook_login.png"
@@ -18,8 +18,12 @@
</div>
<div v-else>
<loading-state v-if="showLoader" :message="emptyStateMessage" />
<form v-if="!showLoader" class="row" @submit.prevent="createChannel()">
<div class="medium-12 columns">
<form
v-if="!showLoader"
class="mx-0 flex flex-wrap"
@submit.prevent="createChannel()"
>
<div class="w-full">
<page-header
:header-title="$t('INBOX_MGMT.ADD.DETAILS.TITLE')"
:header-content="
@@ -30,8 +34,8 @@
"
/>
</div>
<div class="medium-7 columns">
<div class="medium-12 columns">
<div class="w-[60%]">
<div class="w-full">
<div class="input-wrap" :class="{ error: $v.selectedPage.$error }">
{{ $t('INBOX_MGMT.ADD.FB.CHOOSE_PAGE') }}
<multiselect
@@ -52,7 +56,7 @@
</span>
</div>
</div>
<div class="medium-12 columns">
<div class="w-full">
<label :class="{ error: $v.pageName.$error }">
{{ $t('INBOX_MGMT.ADD.FB.INBOX_NAME') }}
<input
@@ -66,7 +70,7 @@
</span>
</label>
</div>
<div class="medium-12 columns text-right">
<div class="w-full text-right">
<input type="submit" value="Create Inbox" class="button" />
</div>
</div>
@@ -1,11 +1,11 @@
<template>
<div class="wizard-body small-9 columns">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%]">
<page-header
:header-title="$t('INBOX_MGMT.ADD.LINE_CHANNEL.TITLE')"
:header-content="$t('INBOX_MGMT.ADD.LINE_CHANNEL.DESC')"
/>
<form class="row" @submit.prevent="createChannel()">
<div class="medium-8 columns">
<form class="mx-0 flex flex-wrap" @submit.prevent="createChannel()">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.channelName.$error }">
{{ $t('INBOX_MGMT.ADD.LINE_CHANNEL.CHANNEL_NAME.LABEL') }}
<input
@@ -22,7 +22,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.lineChannelId.$error }">
{{ $t('INBOX_MGMT.ADD.LINE_CHANNEL.LINE_CHANNEL_ID.LABEL') }}
<input
@@ -36,7 +36,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.lineChannelSecret.$error }">
{{ $t('INBOX_MGMT.ADD.LINE_CHANNEL.LINE_CHANNEL_SECRET.LABEL') }}
<input
@@ -50,7 +50,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.lineChannelToken.$error }">
{{ $t('INBOX_MGMT.ADD.LINE_CHANNEL.LINE_CHANNEL_TOKEN.LABEL') }}
<input
@@ -64,7 +64,7 @@
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<woot-submit-button
:loading="uiFlags.isCreating"
:button-text="$t('INBOX_MGMT.ADD.LINE_CHANNEL.SUBMIT_BUTTON')"
@@ -1,10 +1,10 @@
<template>
<div class="wizard-body small-9 columns">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%]">
<page-header
:header-title="$t('INBOX_MGMT.ADD.SMS.TITLE')"
:header-content="$t('INBOX_MGMT.ADD.SMS.DESC')"
/>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label>
{{ $t('INBOX_MGMT.ADD.SMS.PROVIDERS.LABEL') }}
<select v-model="provider">
@@ -1,11 +1,11 @@
<template>
<div class="wizard-body small-9 columns">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%]">
<page-header
:header-title="$t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.TITLE')"
:header-content="$t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.DESC')"
/>
<form class="row" @submit.prevent="createChannel()">
<div class="medium-8 columns">
<form class="mx-0 flex flex-wrap" @submit.prevent="createChannel()">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.botToken.$error }">
{{ $t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.BOT_TOKEN.LABEL') }}
<input
@@ -22,7 +22,7 @@
</p>
</div>
<div class="medium-12 columns">
<div class="w-full">
<woot-submit-button
:loading="uiFlags.isCreating"
:button-text="$t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.SUBMIT_BUTTON')"
@@ -1,7 +1,7 @@
<!-- Deprecated in favour of separate files for SMS and Whatsapp and also to implement new providers for each platform in the future-->
<template>
<form class="row" @submit.prevent="createChannel()">
<div class="medium-8 columns">
<form class="mx-0 flex flex-wrap" @submit.prevent="createChannel()">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.channelName.$error }">
{{ $t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.LABEL') }}
<input
@@ -16,7 +16,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label
v-if="useMessagingService"
:class="{ error: $v.messagingServiceSID.$error }"
@@ -36,7 +36,10 @@
</label>
</div>
<div v-if="!useMessagingService" class="medium-8 columns">
<div
v-if="!useMessagingService"
class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]"
>
<label :class="{ error: $v.phoneNumber.$error }">
{{ $t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.LABEL') }}
<input
@@ -67,7 +70,7 @@
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.accountSID.$error }">
{{ $t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.LABEL') }}
<input
@@ -92,7 +95,7 @@
{{ $t('INBOX_MGMT.ADD.TWILIO.API_KEY.USE_API_KEY') }}
</label>
</div>
<div v-if="useAPIKey" class="medium-8 columns">
<div v-if="useAPIKey" class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.apiKeySID.$error }">
{{ $t('INBOX_MGMT.ADD.TWILIO.API_KEY.LABEL') }}
<input
@@ -106,7 +109,7 @@
}}</span>
</label>
</div>
<div class="medium-8 columns">
<div class="w-[65%] flex-shrink-0 flex-grow-0 max-w-[65%]">
<label :class="{ error: $v.authToken.$error }">
{{ $t(`INBOX_MGMT.ADD.TWILIO.${authTokeni18nKey}.LABEL`) }}
<input
@@ -123,7 +126,7 @@
</label>
</div>
<div class="medium-12 columns">
<div class="w-full">
<woot-submit-button
:loading="uiFlags.isCreating"
:button-text="$t('INBOX_MGMT.ADD.TWILIO.SUBMIT_BUTTON')"
@@ -1,6 +1,6 @@
<template>
<div class="wizard-body columns content-box small-9">
<div class="login-init full-height text-center">
<div class="wizard-body w-[75%] flex-shrink-0 flex-grow-0 max-w-[75%]">
<div class="login-init h-full text-center">
<form @submit.prevent="requestAuthorization">
<woot-submit-button
icon="brand-twitter"

Some files were not shown because too many files have changed in this diff Show More