mirror of
https://github.com/hcengineering/platform.git
synced 2024-12-22 11:01:54 +03:00
TSK-1459: update Panel layout (#3163)
Signed-off-by: Alexander Platov <sas_lord@mail.ru>
This commit is contained in:
parent
148cbd4898
commit
2e6181acf1
@ -157,23 +157,28 @@
|
|||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
|
|
||||||
<svelte:fragment slot="aside">
|
<svelte:fragment slot="aside">
|
||||||
<Scroller padding={'.75rem 1.5rem'}>
|
{#if $$slots['aside-tabs']}
|
||||||
{#if $$slots.actions}
|
<div class="popupPanel-body__aside-tabsheader">
|
||||||
<div class="flex-row-center pb-3 bottom-divider">
|
<slot name="aside-tabs" />
|
||||||
{#if $$slots['actions-label']}
|
</div>
|
||||||
<span class="fs-bold w-24 mr-6"><slot name="actions-label" /></span>
|
{/if}
|
||||||
{/if}
|
{#if $$slots.actions}
|
||||||
<div class="buttons-group xsmall-gap flex flex-grow">
|
<div class="popupPanel-body__aside-header">
|
||||||
<slot name="actions" />
|
{#if $$slots['actions-label']}
|
||||||
</div>
|
<span class="fs-bold w-27 mr-6"><slot name="actions-label" /></span>
|
||||||
|
{/if}
|
||||||
|
<div class="buttons-group xsmall-gap flex flex-grow">
|
||||||
|
<slot name="actions" />
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
</div>
|
||||||
|
{/if}
|
||||||
|
<Scroller>
|
||||||
{#if $$slots['custom-attributes'] && isCustomAttr}
|
{#if $$slots['custom-attributes'] && isCustomAttr}
|
||||||
<slot name="custom-attributes" direction="column" />
|
<slot name="custom-attributes" direction="column" />
|
||||||
{:else if $$slots.attributes}<slot name="attributes" direction="column" />{/if}
|
{:else if $$slots.attributes}<slot name="attributes" direction="column" />{/if}
|
||||||
{#if $$slots.aside}<slot name="aside" />{/if}
|
{#if $$slots.aside}<slot name="aside" />{/if}
|
||||||
|
<div class="h-2 min-h-2 max-h-2" />
|
||||||
</Scroller>
|
</Scroller>
|
||||||
<div class="h-2 min-h-2 max-h-2" />
|
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
|
|
||||||
{#if $deviceInfo.isMobile}
|
{#if $deviceInfo.isMobile}
|
||||||
|
@ -66,7 +66,7 @@
|
|||||||
{#if editor}
|
{#if editor}
|
||||||
{#if showHeader}
|
{#if showHeader}
|
||||||
<span
|
<span
|
||||||
class="overflow-label"
|
class="label"
|
||||||
use:tooltip={{
|
use:tooltip={{
|
||||||
component: Label,
|
component: Label,
|
||||||
props: { label: attribute.label }
|
props: { label: attribute.label }
|
||||||
|
@ -32,21 +32,8 @@
|
|||||||
export let justify: 'left' | 'center' = 'left'
|
export let justify: 'left' | 'center' = 'left'
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="attributes-bar-container vertical">
|
<div class="popupPanel-body__aside-grid">
|
||||||
{#each keys as key (typeof key === 'string' ? key : key.key)}
|
{#each keys as key (typeof key === 'string' ? key : key.key)}
|
||||||
<AttributeBarEditor {key} {_class} {object} {showHeader} {readonly} {draft} on:update />
|
<AttributeBarEditor {key} {_class} {object} {showHeader} {readonly} {draft} on:update />
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
.attributes-bar-container {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 1.5fr;
|
|
||||||
grid-auto-flow: row;
|
|
||||||
justify-content: start;
|
|
||||||
align-items: center;
|
|
||||||
gap: 1rem;
|
|
||||||
width: 100%;
|
|
||||||
height: min-content;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
@ -153,7 +153,7 @@ export class LiveQuery {
|
|||||||
private oldOptions: FindOptions<Doc> | undefined
|
private oldOptions: FindOptions<Doc> | undefined
|
||||||
private oldCallback: ((result: FindResult<any>) => void) | undefined
|
private oldCallback: ((result: FindResult<any>) => void) | undefined
|
||||||
private reqId = 0
|
private reqId = 0
|
||||||
unsubscribe = () => {}
|
unsubscribe: () => void = () => {}
|
||||||
clientRecreated = false
|
clientRecreated = false
|
||||||
|
|
||||||
constructor (noDestroy: boolean = false) {
|
constructor (noDestroy: boolean = false) {
|
||||||
|
@ -115,8 +115,8 @@ p:last-child { margin-block-end: 0; }
|
|||||||
hyphens: auto;
|
hyphens: auto;
|
||||||
line-height: 150%;
|
line-height: 150%;
|
||||||
|
|
||||||
&.contrast { color: var(--theme-accent-color); }
|
&.contrast { color: var(--theme-caption-color); }
|
||||||
&:not(.contrast) { color: var(--content-color); }
|
&:not(.contrast) { color: var(--theme-content-color); }
|
||||||
|
|
||||||
a {
|
a {
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
@ -127,11 +127,11 @@ p:last-child { margin-block-end: 0; }
|
|||||||
|
|
||||||
a.noUnderline {
|
a.noUnderline {
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
&:active {
|
&:active {
|
||||||
color: var(--accent-color);
|
color: var(--theme-caption-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -159,7 +159,7 @@ a.noUnderline {
|
|||||||
|
|
||||||
input.search {
|
input.search {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: var(--accent-color);
|
color: var(--theme-caption-color);
|
||||||
border: none;
|
border: none;
|
||||||
caret-color: var(--theme-caret-color);
|
caret-color: var(--theme-caret-color);
|
||||||
|
|
||||||
@ -281,7 +281,6 @@ input.search {
|
|||||||
}
|
}
|
||||||
.label {
|
.label {
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
font-weight: 500;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
color: var(--theme-content-color);
|
color: var(--theme-content-color);
|
||||||
|
|
||||||
@ -337,16 +336,6 @@ input.search {
|
|||||||
.avatar-container:not(.no-img) { transform: translateY(.375rem); }
|
.avatar-container:not(.no-img) { transform: translateY(.375rem); }
|
||||||
.avatar-container.no-img { transform: translateY(.15rem); }
|
.avatar-container.no-img { transform: translateY(.15rem); }
|
||||||
}
|
}
|
||||||
// Presenters on the card
|
|
||||||
.card-container .flex-presenter,
|
|
||||||
.card-container .inline-presenter {
|
|
||||||
.icon { display: none; }
|
|
||||||
.label {
|
|
||||||
font-size: .75rem;
|
|
||||||
color: var(--dark-color);
|
|
||||||
}
|
|
||||||
&:hover .label { color: var(--content-color); }
|
|
||||||
}
|
|
||||||
|
|
||||||
.buttons-group {
|
.buttons-group {
|
||||||
display: grid;
|
display: grid;
|
||||||
@ -527,6 +516,7 @@ input.search {
|
|||||||
.px-2 { padding: 0 .5rem; }
|
.px-2 { padding: 0 .5rem; }
|
||||||
.px-3 { padding: 0 .75rem; }
|
.px-3 { padding: 0 .75rem; }
|
||||||
.px-4 { padding: 0 1rem; }
|
.px-4 { padding: 0 1rem; }
|
||||||
|
.px-6 { padding: 0 1.5rem; }
|
||||||
.px-10 { padding: 0 2.5rem; }
|
.px-10 { padding: 0 2.5rem; }
|
||||||
.py-1 { padding: 0.25rem 0; }
|
.py-1 { padding: 0.25rem 0; }
|
||||||
.py-4 { padding: 1rem 0; }
|
.py-4 { padding: 1rem 0; }
|
||||||
@ -622,6 +612,7 @@ input.search {
|
|||||||
.w-16 { width: 4rem; }
|
.w-16 { width: 4rem; }
|
||||||
.w-22 { width: 5.5rem; }
|
.w-22 { width: 5.5rem; }
|
||||||
.w-24 { width: 6rem; }
|
.w-24 { width: 6rem; }
|
||||||
|
.w-27 { width: 6.75rem; }
|
||||||
.w-32 { width: 8rem; }
|
.w-32 { width: 8rem; }
|
||||||
.w-60 { width: 15rem; }
|
.w-60 { width: 15rem; }
|
||||||
.w-85 { width: 21.25rem; }
|
.w-85 { width: 21.25rem; }
|
||||||
@ -706,19 +697,19 @@ input.search {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.hover-trans {
|
.hover-trans {
|
||||||
color: var(--dark-color);
|
color: var(--theme-dark-color);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
&:hover { color: var(--caption-color); }
|
&:hover { color: var(--theme-caption-color); }
|
||||||
&:active { color: var(--accent-color); }
|
&:active { color: var(--theme-caption-color); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Link */
|
/* Link */
|
||||||
a.no-line {
|
a.no-line {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: var(--accent-color);
|
color: var(--theme-caption-color);
|
||||||
&:hover { color: var(--caption-color); }
|
&:hover { color: var(--theme-caption-color); }
|
||||||
&:active { color: var(--accent-color); }
|
&:active { color: var(--theme-caption-color); }
|
||||||
&:visited { color: var(--accent-color); }
|
&:visited { color: var(--theme-caption-color); }
|
||||||
}
|
}
|
||||||
.cursor-pointer { cursor: pointer; }
|
.cursor-pointer { cursor: pointer; }
|
||||||
.cursor-default { cursor: default; }
|
.cursor-default { cursor: default; }
|
||||||
@ -733,14 +724,14 @@ a.no-line {
|
|||||||
.fs-title {
|
.fs-title {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
.trans-title {
|
.trans-title {
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: .75rem;
|
font-size: .75rem;
|
||||||
color: var(--dark-color);
|
color: var(--theme-dark-color);
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
.text-xs { font-size: .625rem; }
|
.text-xs { font-size: .625rem; }
|
||||||
|
@ -737,6 +737,15 @@
|
|||||||
& > * { margin-left: .375rem; }
|
& > * { margin-left: .375rem; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Labels on the ListView
|
||||||
|
.list-container .listitems-container,
|
||||||
|
.list-container .listitems-container:hover,
|
||||||
|
.list-container .button,
|
||||||
|
.list-container .button:hover {
|
||||||
|
background-color: var(--theme-list-button-color) !important;
|
||||||
|
.icon { color: var(--theme-halfcontent-color) !important; }
|
||||||
|
.label { color: var(--theme-halfcontent-color) !important; }
|
||||||
|
}
|
||||||
|
|
||||||
/* Kanban - global style */
|
/* Kanban - global style */
|
||||||
.kanban-container .card-container .card-labels > * { margin: .25rem .25rem 0 0; }
|
.kanban-container .card-container .card-labels > * { margin: .25rem .25rem 0 0; }
|
||||||
|
@ -66,6 +66,7 @@
|
|||||||
scrollbar-color: var(--body-accent) var(--board-bg-color);
|
scrollbar-color: var(--body-accent) var(--board-bg-color);
|
||||||
scrollbar-width: none;
|
scrollbar-width: none;
|
||||||
--body-font-size: .875rem;
|
--body-font-size: .875rem;
|
||||||
|
--panel-aside-width: 25rem; // 20rem;
|
||||||
--font-family: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto;
|
--font-family: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto;
|
||||||
--timing-shadow: cubic-bezier(0,.65,.35,1);
|
--timing-shadow: cubic-bezier(0,.65,.35,1);
|
||||||
--timing-main: cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
--timing-main: cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
||||||
|
@ -165,12 +165,24 @@
|
|||||||
|
|
||||||
.popupPanel-body__header {
|
.popupPanel-body__header {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
align-items: center;
|
||||||
|
height: 100%;
|
||||||
|
min-height: 0;
|
||||||
|
|
||||||
|
&-wrapper {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
min-width: 0;
|
||||||
|
min-height: 3.5rem;
|
||||||
|
border-bottom: 1px solid var(--theme-divider-color);
|
||||||
|
}
|
||||||
&.main {
|
&.main {
|
||||||
margin: 0 auto;
|
|
||||||
padding: .75rem 1.25rem;
|
padding: .75rem 1.25rem;
|
||||||
width: calc(100% - 5rem);
|
width: calc(100% - 5rem);
|
||||||
|
height: 100%;
|
||||||
|
min-width: 0;
|
||||||
max-width: 900px;
|
max-width: 900px;
|
||||||
|
|
||||||
&.max {
|
&.max {
|
||||||
@ -203,38 +215,26 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&__aside {
|
&__aside {
|
||||||
position: relative;
|
|
||||||
width: 25%;
|
width: 25%;
|
||||||
min-width: 320px;
|
min-width: var(--panel-aside-width);
|
||||||
|
border-left: 1px solid var(--theme-divider-color);
|
||||||
&::before {
|
|
||||||
position: absolute;
|
|
||||||
content: '';
|
|
||||||
top: 1rem;
|
|
||||||
bottom: 1rem;
|
|
||||||
left: 0;
|
|
||||||
width: 0;
|
|
||||||
border-left: 1px solid var(--theme-divider-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
&.float {
|
&.float {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 100%;
|
left: 100%;
|
||||||
width: 320px;
|
width: var(--panel-aside-width);
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
max-width: 320px;
|
max-width: var(--panel-aside-width);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: var(--theme-panel-color);
|
background-color: var(--theme-panel-color);
|
||||||
border-left: 1px solid var(--theme-divider-color);
|
|
||||||
border-bottom-right-radius: .45rem;
|
border-bottom-right-radius: .45rem;
|
||||||
box-shadow: 0 0 0 0 rgba(0, 0, 0, 0);
|
box-shadow: 0 0 0 0 rgba(0, 0, 0, 0);
|
||||||
transition: box-shadow 150ms ease 0s, transform 150ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
transition: box-shadow 150ms ease 0s, transform 150ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||||||
transform: translateX(0);
|
transform: translateX(0);
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
|
|
||||||
&::before { content: none; }
|
|
||||||
&.shown {
|
&.shown {
|
||||||
box-shadow: var(--popup-aside-shadow);
|
box-shadow: var(--popup-aside-shadow);
|
||||||
transform: translateX(-100%);
|
transform: translateX(-100%);
|
||||||
@ -252,6 +252,46 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&-header,
|
||||||
|
&-tabsheader {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
padding: .75rem 2rem;
|
||||||
|
height: 3.5rem;
|
||||||
|
min-height: 3.5rem;
|
||||||
|
border-bottom: 1px solid var(--theme-divider-color);
|
||||||
|
}
|
||||||
|
&-tabsheader {
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1.5fr;
|
||||||
|
grid-auto-flow: row;
|
||||||
|
justify-content: start;
|
||||||
|
align-items: center;
|
||||||
|
row-gap: .25rem;
|
||||||
|
column-gap: 1rem;
|
||||||
|
margin: .5rem 2rem;
|
||||||
|
width: calc(100% - 4rem);
|
||||||
|
height: min-content;
|
||||||
|
|
||||||
|
.divider {
|
||||||
|
grid-column: 1 / 3;
|
||||||
|
margin: .75rem -2rem;
|
||||||
|
height: 1px;
|
||||||
|
background-color: var(--theme-divider-color);
|
||||||
|
}
|
||||||
|
.label,
|
||||||
|
.labelTop { color: var(--theme-dark-color); }
|
||||||
|
.labelTop {
|
||||||
|
align-self: start;
|
||||||
|
margin-top: 0.385rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// &.asideShown .popupPanel-body__main {
|
// &.asideShown .popupPanel-body__main {
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
export let iconSize: IconSize = size === 'inline' ? 'inline' : 'small'
|
export let iconSize: IconSize = size === 'inline' ? 'inline' : 'small'
|
||||||
export let iconRightSize: IconSize = 'x-small'
|
export let iconRightSize: IconSize = 'x-small'
|
||||||
export let short: boolean = false
|
export let short: boolean = false
|
||||||
|
export let accent: boolean = false
|
||||||
|
|
||||||
// $: iconSize = size === 'inline' ? 'inline' : 'small'
|
// $: iconSize = size === 'inline' ? 'inline' : 'small'
|
||||||
$: iconOnly =
|
$: iconOnly =
|
||||||
@ -97,6 +98,7 @@
|
|||||||
bind:this={input}
|
bind:this={input}
|
||||||
class="button {kind} {size} jf-{justify} sh-{shape ?? 'no-shape'} bs-{borderStyle}"
|
class="button {kind} {size} jf-{justify} sh-{shape ?? 'no-shape'} bs-{borderStyle}"
|
||||||
class:only-icon={iconOnly}
|
class:only-icon={iconOnly}
|
||||||
|
class:accent
|
||||||
class:highlight
|
class:highlight
|
||||||
class:selected
|
class:selected
|
||||||
class:notSelected
|
class:notSelected
|
||||||
@ -178,7 +180,6 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
padding: 0 0.625rem;
|
padding: 0 0.625rem;
|
||||||
font-weight: 500;
|
|
||||||
min-width: 1.375rem;
|
min-width: 1.375rem;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
color: var(--theme-caption-color);
|
color: var(--theme-caption-color);
|
||||||
@ -187,6 +188,9 @@
|
|||||||
transition-property: border, background-color, color, box-shadow;
|
transition-property: border, background-color, color, box-shadow;
|
||||||
transition-duration: 0.15s;
|
transition-duration: 0.15s;
|
||||||
|
|
||||||
|
&.accent {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
.btn-icon {
|
.btn-icon {
|
||||||
color: var(--theme-content-color);
|
color: var(--theme-content-color);
|
||||||
transition: color 0.15s;
|
transition: color 0.15s;
|
||||||
@ -391,8 +395,8 @@
|
|||||||
&.list {
|
&.list {
|
||||||
padding: 0 0.625em;
|
padding: 0 0.625em;
|
||||||
min-height: 1.75rem;
|
min-height: 1.75rem;
|
||||||
color: var(--theme-halfcontent-color);
|
color: var(--theme-content-color);
|
||||||
background-color: var(--theme-list-button-color);
|
background-color: var(--theme-button-enabled);
|
||||||
border: 1px solid var(--theme-button-border);
|
border: 1px solid var(--theme-button-border);
|
||||||
border-radius: 1.5rem;
|
border-radius: 1.5rem;
|
||||||
// transition-property: border, color, background-color;
|
// transition-property: border, color, background-color;
|
||||||
@ -402,8 +406,8 @@
|
|||||||
color: var(--theme-dark-color);
|
color: var(--theme-dark-color);
|
||||||
}
|
}
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--theme-halfcontent-color);
|
color: var(--theme-caption-color);
|
||||||
background-color: var(--theme-list-button-color);
|
background-color: var(--theme-button-hovered);
|
||||||
border-color: var(--theme-button-border);
|
border-color: var(--theme-button-border);
|
||||||
}
|
}
|
||||||
&:focus {
|
&:focus {
|
||||||
@ -412,6 +416,7 @@
|
|||||||
}
|
}
|
||||||
&.primary {
|
&.primary {
|
||||||
padding: 0 0.75rem;
|
padding: 0 0.75rem;
|
||||||
|
font-weight: 500;
|
||||||
color: var(--primary-button-color);
|
color: var(--primary-button-color);
|
||||||
background-color: var(--primary-button-enabled);
|
background-color: var(--primary-button-enabled);
|
||||||
border-color: var(--primary-button-border);
|
border-color: var(--primary-button-border);
|
||||||
|
@ -182,8 +182,10 @@
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{#if $$slots.header && isHeader}
|
{#if $$slots.header && isHeader}
|
||||||
<div class="popupPanel-body__header main bottom-divider" class:max={useMaxWidth}>
|
<div class="popupPanel-body__header-wrapper">
|
||||||
<slot name="header" />
|
<div class="popupPanel-body__header main" class:max={useMaxWidth}>
|
||||||
|
<slot name="header" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<slot />
|
<slot />
|
||||||
|
@ -195,6 +195,7 @@
|
|||||||
&.plain,
|
&.plain,
|
||||||
&.separated {
|
&.separated {
|
||||||
margin-bottom: -1px;
|
margin-bottom: -1px;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
.plain {
|
.plain {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
export let shouldShowLabel: boolean = true
|
export let shouldShowLabel: boolean = true
|
||||||
export let size: ButtonSize | 'x-small' = 'small'
|
export let size: ButtonSize | 'x-small' = 'small'
|
||||||
export let kind: ButtonKind = 'link'
|
export let kind: ButtonKind = 'link'
|
||||||
|
export let width: string | undefined = undefined
|
||||||
export let label = ui.string.DueDate
|
export let label = ui.string.DueDate
|
||||||
export let detail = ui.string.NeedsToBeCompletedByThisDate
|
export let detail = ui.string.NeedsToBeCompletedByThisDate
|
||||||
|
|
||||||
@ -67,6 +68,7 @@
|
|||||||
class:editable
|
class:editable
|
||||||
class:dateTimeButtonNoLabel={!shouldShowLabel}
|
class:dateTimeButtonNoLabel={!shouldShowLabel}
|
||||||
class:text-xs={size === 'x-small'}
|
class:text-xs={size === 'x-small'}
|
||||||
|
style:width
|
||||||
on:click={(e) => {
|
on:click={(e) => {
|
||||||
if (editable && !opened) {
|
if (editable && !opened) {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
@ -248,6 +250,7 @@
|
|||||||
&.list {
|
&.list {
|
||||||
padding: 0 0.625em 0 0.5rem;
|
padding: 0 0.625em 0 0.5rem;
|
||||||
min-height: 1.75rem;
|
min-height: 1.75rem;
|
||||||
|
color: var(--theme-halfcontent-color);
|
||||||
background-color: var(--theme-list-button-color);
|
background-color: var(--theme-list-button-color);
|
||||||
border: 1px solid var(--theme-divider-color);
|
border: 1px solid var(--theme-divider-color);
|
||||||
border-radius: 3rem;
|
border-radius: 3rem;
|
||||||
@ -255,10 +258,14 @@
|
|||||||
transition-duration: 0.15s;
|
transition-duration: 0.15s;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--theme-caption-color);
|
color: var(--theme-halfcontent-color);
|
||||||
background-color: var(--theme-list-button-color);
|
background-color: var(--theme-list-button-hover);
|
||||||
border-color: var(--theme-divider-color);
|
border-color: var(--theme-divider-color);
|
||||||
}
|
}
|
||||||
|
.btn-icon,
|
||||||
|
&:hover .btn-icon {
|
||||||
|
color: var(--theme-halfcontent-color) !important;
|
||||||
|
}
|
||||||
&.medium {
|
&.medium {
|
||||||
height: 1.75rem;
|
height: 1.75rem;
|
||||||
}
|
}
|
||||||
|
@ -563,7 +563,6 @@
|
|||||||
|
|
||||||
&.secondary {
|
&.secondary {
|
||||||
padding: 0 0.625rem;
|
padding: 0 0.625rem;
|
||||||
font-weight: 500;
|
|
||||||
color: var(--theme-caption-color);
|
color: var(--theme-caption-color);
|
||||||
background-color: var(--theme-button-enabled);
|
background-color: var(--theme-button-enabled);
|
||||||
border-color: var(--theme-button-border);
|
border-color: var(--theme-button-border);
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
export let editable: boolean = true
|
export let editable: boolean = true
|
||||||
export let shouldIgnoreOverdue: boolean = false
|
export let shouldIgnoreOverdue: boolean = false
|
||||||
export let size: ButtonSize = 'medium'
|
export let size: ButtonSize = 'medium'
|
||||||
|
export let width: string | undefined = undefined
|
||||||
|
|
||||||
const today = new Date(new Date(Date.now()).setHours(0, 0, 0, 0))
|
const today = new Date(new Date(Date.now()).setHours(0, 0, 0, 0))
|
||||||
$: isOverdue = value !== null && value < today.getTime()
|
$: isOverdue = value !== null && value < today.getTime()
|
||||||
@ -77,6 +78,7 @@
|
|||||||
{#if shouldRender}
|
{#if shouldRender}
|
||||||
<div
|
<div
|
||||||
class="clear-mins"
|
class="clear-mins"
|
||||||
|
style:width
|
||||||
use:tooltip={formattedDate
|
use:tooltip={formattedDate
|
||||||
? {
|
? {
|
||||||
direction: 'top',
|
direction: 'top',
|
||||||
@ -91,6 +93,6 @@
|
|||||||
}
|
}
|
||||||
: undefined}
|
: undefined}
|
||||||
>
|
>
|
||||||
<DatePresenter {value} {editable} icon={iconModifier} {kind} {size} on:change={handleDueDateChanged} />
|
<DatePresenter {value} {editable} icon={iconModifier} {kind} {size} {width} on:change={handleDueDateChanged} />
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
{#if value}
|
{#if value}
|
||||||
<ColorPresenter value={value.color} {isHovered} {size} on:click>
|
<ColorPresenter value={value.color} {isHovered} {size} on:click>
|
||||||
{#if size !== 'tiny'}
|
{#if size !== 'tiny'}
|
||||||
<div class="flex-center h-full w-full fs-title text-sm pr-1 pl-1">{value.title}</div>
|
<div class="flex-center h-full w-full text-sm pr-1 pl-1">{value.title}</div>
|
||||||
{/if}
|
{/if}
|
||||||
</ColorPresenter>
|
</ColorPresenter>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
Button,
|
Button,
|
||||||
ButtonKind,
|
ButtonKind,
|
||||||
ButtonSize,
|
ButtonSize,
|
||||||
|
IconSize,
|
||||||
getEventPositionElement,
|
getEventPositionElement,
|
||||||
getFocusManager,
|
getFocusManager,
|
||||||
Icon,
|
Icon,
|
||||||
@ -56,6 +57,7 @@
|
|||||||
export let readonly = false
|
export let readonly = false
|
||||||
export let kind: ButtonKind = 'no-border'
|
export let kind: ButtonKind = 'no-border'
|
||||||
export let size: ButtonSize = 'small'
|
export let size: ButtonSize = 'small'
|
||||||
|
export let avatarSize: IconSize = kind === 'secondary' ? 'small' : 'card'
|
||||||
export let justify: 'left' | 'center' = 'center'
|
export let justify: 'left' | 'center' = 'center'
|
||||||
export let width: string | undefined = undefined
|
export let width: string | undefined = undefined
|
||||||
export let focusIndex = -1
|
export let focusIndex = -1
|
||||||
@ -145,7 +147,7 @@
|
|||||||
>
|
>
|
||||||
{#if selected}
|
{#if selected}
|
||||||
{#if hideIcon || selected}
|
{#if hideIcon || selected}
|
||||||
<UserInfo value={selected} size={kind === 'link' ? 'x-small' : 'tiny'} {icon} on:accent-color />
|
<UserInfo value={selected} size={avatarSize} {icon} on:accent-color />
|
||||||
{:else}
|
{:else}
|
||||||
{getName(selected)}
|
{getName(selected)}
|
||||||
{/if}
|
{/if}
|
||||||
@ -153,7 +155,7 @@
|
|||||||
<div class="flex-presenter not-selected">
|
<div class="flex-presenter not-selected">
|
||||||
{#if icon}
|
{#if icon}
|
||||||
<div class="icon" class:small-gap={size === 'inline' || size === 'small'}>
|
<div class="icon" class:small-gap={size === 'inline' || size === 'small'}>
|
||||||
<Icon {icon} size={kind === 'link' || kind === 'secondary' ? 'small' : size} />
|
<Icon {icon} size={avatarSize} />
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<div class="label no-underline">
|
<div class="label no-underline">
|
||||||
|
@ -45,9 +45,8 @@
|
|||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.user {
|
.user {
|
||||||
color: var(--accent-color);
|
color: var(--theme-caption-color);
|
||||||
margin-left: 0.5rem;
|
margin-left: 0.5rem;
|
||||||
font-weight: 500;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
import contact, { Employee } from '@hcengineering/contact'
|
import contact, { Employee } from '@hcengineering/contact'
|
||||||
import type { Class, DocumentQuery, FindOptions, Ref } from '@hcengineering/core'
|
import type { Class, DocumentQuery, FindOptions, Ref } from '@hcengineering/core'
|
||||||
import type { IntlString } from '@hcengineering/platform'
|
import type { IntlString } from '@hcengineering/platform'
|
||||||
import { ButtonKind, ButtonSize, LabelAndProps } from '@hcengineering/ui'
|
import { ButtonKind, ButtonSize, IconSize, LabelAndProps } from '@hcengineering/ui'
|
||||||
import presentation from '@hcengineering/presentation'
|
import presentation from '@hcengineering/presentation'
|
||||||
import IconPerson from './icons/Person.svelte'
|
import IconPerson from './icons/Person.svelte'
|
||||||
import UserBox from './UserBox.svelte'
|
import UserBox from './UserBox.svelte'
|
||||||
@ -34,6 +34,7 @@
|
|||||||
export let titleDeselect: IntlString | undefined = undefined
|
export let titleDeselect: IntlString | undefined = undefined
|
||||||
export let kind: ButtonKind = 'no-border'
|
export let kind: ButtonKind = 'no-border'
|
||||||
export let size: ButtonSize = 'small'
|
export let size: ButtonSize = 'small'
|
||||||
|
export let avatarSize: IconSize = 'card'
|
||||||
export let justify: 'left' | 'center' = 'center'
|
export let justify: 'left' | 'center' = 'center'
|
||||||
export let width: string | undefined = undefined
|
export let width: string | undefined = undefined
|
||||||
export let focusIndex = -1
|
export let focusIndex = -1
|
||||||
@ -54,6 +55,7 @@
|
|||||||
{titleDeselect}
|
{titleDeselect}
|
||||||
{kind}
|
{kind}
|
||||||
{size}
|
{size}
|
||||||
|
{avatarSize}
|
||||||
{justify}
|
{justify}
|
||||||
{width}
|
{width}
|
||||||
{focusIndex}
|
{focusIndex}
|
||||||
|
@ -106,11 +106,10 @@
|
|||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
}
|
}
|
||||||
.eContentPresenterIcon {
|
.eContentPresenterIcon {
|
||||||
color: var(--dark-color);
|
color: var(--theme-dark-color);
|
||||||
}
|
}
|
||||||
.eContentPresenterLabel {
|
.eContentPresenterLabel {
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
font-weight: 500;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
color: var(--theme-caption-color);
|
color: var(--theme-caption-color);
|
||||||
|
|
||||||
@ -139,10 +138,9 @@
|
|||||||
.status {
|
.status {
|
||||||
margin-left: 0.25rem;
|
margin-left: 0.25rem;
|
||||||
padding: 0.125rem 0.25rem;
|
padding: 0.125rem 0.25rem;
|
||||||
font-weight: 500;
|
|
||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
color: var(--content-color);
|
color: var(--theme-content-color);
|
||||||
background-color: var(--noborder-bg-color);
|
background-color: var(--theme-button-enabled);
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
Button,
|
Button,
|
||||||
ButtonKind,
|
ButtonKind,
|
||||||
ButtonSize,
|
ButtonSize,
|
||||||
|
IconSize,
|
||||||
getEventPositionElement,
|
getEventPositionElement,
|
||||||
getFocusManager,
|
getFocusManager,
|
||||||
Icon,
|
Icon,
|
||||||
@ -54,6 +55,7 @@
|
|||||||
export let readonly = false
|
export let readonly = false
|
||||||
export let kind: ButtonKind = 'no-border'
|
export let kind: ButtonKind = 'no-border'
|
||||||
export let size: ButtonSize = 'small'
|
export let size: ButtonSize = 'small'
|
||||||
|
export let avatarSize: IconSize = kind === 'link' ? 'x-small' : 'tiny'
|
||||||
export let justify: 'left' | 'center' = 'center'
|
export let justify: 'left' | 'center' = 'center'
|
||||||
export let width: string | undefined = undefined
|
export let width: string | undefined = undefined
|
||||||
export let focusIndex = -1
|
export let focusIndex = -1
|
||||||
@ -151,7 +153,7 @@
|
|||||||
>
|
>
|
||||||
{#if selected}
|
{#if selected}
|
||||||
{#if hideIcon || selected}
|
{#if hideIcon || selected}
|
||||||
<UserInfo value={selected} size={kind === 'link' ? 'x-small' : 'tiny'} {icon} />
|
<UserInfo value={selected} size={avatarSize} {icon} />
|
||||||
{:else}
|
{:else}
|
||||||
{getName(selected)}
|
{getName(selected)}
|
||||||
{/if}
|
{/if}
|
||||||
@ -159,7 +161,7 @@
|
|||||||
<div class="flex-presenter not-selected">
|
<div class="flex-presenter not-selected">
|
||||||
{#if icon}
|
{#if icon}
|
||||||
<div class="icon" class:small-gap={size === 'inline' || size === 'small'}>
|
<div class="icon" class:small-gap={size === 'inline' || size === 'small'}>
|
||||||
<Icon {icon} size={'small'} />
|
<Icon {icon} size={avatarSize} />
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<div class="label no-underline">
|
<div class="label no-underline">
|
||||||
|
@ -525,8 +525,8 @@
|
|||||||
{readonly}
|
{readonly}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="tab-content">
|
<div class="doc-divider" />
|
||||||
<div class="divider" />
|
<div class="popupPanel-body__aside-grid">
|
||||||
<span class="label labelTop">
|
<span class="label labelTop">
|
||||||
<Label label={document.string.Labels} />
|
<Label label={document.string.Labels} />
|
||||||
</span>
|
</span>
|
||||||
@ -552,28 +552,12 @@
|
|||||||
line-height: 150%;
|
line-height: 150%;
|
||||||
// overflow: auto;
|
// overflow: auto;
|
||||||
}
|
}
|
||||||
|
.doc-divider {
|
||||||
.tab-content {
|
flex-shrink: 0;
|
||||||
display: grid;
|
margin: 0 0 0.5rem;
|
||||||
grid-template-columns: 1fr 1.5fr;
|
height: 1px;
|
||||||
grid-auto-flow: row;
|
background-color: var(--theme-divider-color);
|
||||||
justify-content: start;
|
|
||||||
align-items: center;
|
|
||||||
gap: 1rem;
|
|
||||||
margin-top: 1rem;
|
|
||||||
width: 100%;
|
|
||||||
height: min-content;
|
|
||||||
|
|
||||||
.divider {
|
|
||||||
grid-column: 1 / 3;
|
|
||||||
height: 1px;
|
|
||||||
background-color: var(--divider-color);
|
|
||||||
}
|
|
||||||
.labelTop {
|
|
||||||
align-self: start;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.emphasized {
|
.emphasized {
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
background-color: var(--body-color);
|
background-color: var(--body-color);
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
import { Doc, Ref } from '@hcengineering/core'
|
import { Doc, Ref } from '@hcengineering/core'
|
||||||
import { getEmbeddedLabel } from '@hcengineering/platform'
|
import { getEmbeddedLabel } from '@hcengineering/platform'
|
||||||
import presentation from '@hcengineering/presentation'
|
import presentation from '@hcengineering/presentation'
|
||||||
import { Button, Icon, IconAdd, Label, showPopup } from '@hcengineering/ui'
|
import { Button, Icon, IconAdd, Label, showPopup, Scroller } from '@hcengineering/ui'
|
||||||
import view, { BuildModelKey } from '@hcengineering/view'
|
import view, { BuildModelKey } from '@hcengineering/view'
|
||||||
import { Table } from '@hcengineering/view-resources'
|
import { Table } from '@hcengineering/view-resources'
|
||||||
import recruit from '../plugin'
|
import recruit from '../plugin'
|
||||||
@ -57,12 +57,14 @@
|
|||||||
<Button id="appls.add" icon={IconAdd} kind={'transparent'} shape={'circle'} on:click={createApp} />
|
<Button id="appls.add" icon={IconAdd} kind={'transparent'} shape={'circle'} on:click={createApp} />
|
||||||
</div>
|
</div>
|
||||||
{#if (vacancies ?? 0) > 0}
|
{#if (vacancies ?? 0) > 0}
|
||||||
<Table
|
<Scroller horizontal>
|
||||||
_class={recruit.class.Vacancy}
|
<Table
|
||||||
{config}
|
_class={recruit.class.Vacancy}
|
||||||
query={{ company: objectId }}
|
{config}
|
||||||
loadingProps={{ length: vacancies ?? 0 }}
|
query={{ company: objectId }}
|
||||||
/>
|
loadingProps={{ length: vacancies ?? 0 }}
|
||||||
|
/>
|
||||||
|
</Scroller>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="antiSection-empty solid flex-col-center mt-3">
|
<div class="antiSection-empty solid flex-col-center mt-3">
|
||||||
<div class="caption-color">
|
<div class="caption-color">
|
||||||
|
@ -90,7 +90,6 @@
|
|||||||
min-width: 0;
|
min-width: 0;
|
||||||
min-height: 1.5rem;
|
min-height: 1.5rem;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-weight: 500;
|
|
||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
color: var(--theme-content-color);
|
color: var(--theme-content-color);
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
@ -102,7 +101,6 @@
|
|||||||
.tag-item-inline {
|
.tag-item-inline {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-left: 0.75rem;
|
padding-left: 0.75rem;
|
||||||
font-weight: 500;
|
|
||||||
color: var(--theme-content-color);
|
color: var(--theme-content-color);
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
|
@ -42,18 +42,18 @@
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div class="color" style:background-color={getPlatformColor(value.color ?? 0)} />
|
<div class="color" style:background-color={getPlatformColor(value.color ?? 0)} />
|
||||||
<span class="overflow-label ml-1 text-sm caption-color max-w-40">{value.title}</span>
|
<span class="label overflow-label ml-1 text-sm caption-color max-w-40">{value.title}</span>
|
||||||
</button>
|
</button>
|
||||||
{:else if kind === 'list'}
|
{:else if kind === 'list'}
|
||||||
<div
|
<div
|
||||||
class="list-container"
|
class="listitems-container"
|
||||||
style:padding-right={isEditable ? '0' : '0.5rem'}
|
style:padding-right={isEditable ? '0' : '0.5rem'}
|
||||||
use:resizeObserver={(element) => {
|
use:resizeObserver={(element) => {
|
||||||
realWidth = element.clientWidth
|
realWidth = element.clientWidth
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div class="color" style:background-color={getPlatformColor(value.color ?? 0)} />
|
<div class="color" style:background-color={getPlatformColor(value.color ?? 0)} />
|
||||||
<span class="overflow-label ml-1-5 caption-color max-w-40">
|
<span class="label overflow-label ml-1-5 max-w-40">
|
||||||
{value.title}
|
{value.title}
|
||||||
</span>
|
</span>
|
||||||
{#if isEditable}
|
{#if isEditable}
|
||||||
@ -66,7 +66,7 @@
|
|||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.list-container {
|
.listitems-container {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -75,21 +75,28 @@
|
|||||||
height: 1.75rem;
|
height: 1.75rem;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
background-color: var(--theme-list-button-color);
|
background-color: var(--theme-button-enabled);
|
||||||
border: 1px solid var(--theme-button-border);
|
border: 1px solid var(--theme-button-border);
|
||||||
border-radius: 1.5rem;
|
border-radius: 1.5rem;
|
||||||
|
user-select: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--theme-button-hovered);
|
||||||
|
}
|
||||||
|
.label {
|
||||||
|
color: var(--theme-caption-color);
|
||||||
|
}
|
||||||
.btn-close {
|
.btn-close {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
margin-left: 0.125rem;
|
margin-left: 0.125rem;
|
||||||
padding: 0 0.25rem 0 0.125rem;
|
padding: 0 0.25rem 0 0.125rem;
|
||||||
height: 1.75rem;
|
height: 1.75rem;
|
||||||
color: var(--content-color);
|
color: var(--theme-content-color);
|
||||||
border-left: 1px solid transparent;
|
border-left: 1px solid transparent;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
border-left-color: var(--divider-color);
|
border-left-color: var(--theme-divider-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -102,7 +109,6 @@
|
|||||||
padding: 0 0.375rem;
|
padding: 0 0.375rem;
|
||||||
height: 1.5rem;
|
height: 1.5rem;
|
||||||
min-width: 1.5rem;
|
min-width: 1.5rem;
|
||||||
font-weight: 500;
|
|
||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
line-height: 0.75rem;
|
line-height: 0.75rem;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
@ -60,32 +60,32 @@
|
|||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.step-container {
|
.step-container {
|
||||||
margin: 0.125rem 0.125rem 0 0;
|
margin: 0.375rem 0.375rem 0 0;
|
||||||
}
|
}
|
||||||
.tag-button {
|
.tag-button {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
padding: 0 0.5rem;
|
padding: 0 0.625rem 0 0.5rem;
|
||||||
height: 1.5rem;
|
height: 2rem;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
color: var(--content-color);
|
color: var(--theme-content-color);
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
border-radius: 0.75rem;
|
border-radius: 1rem;
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
width: 0.625rem;
|
width: 1rem;
|
||||||
height: 0.625rem;
|
height: 1rem;
|
||||||
}
|
}
|
||||||
.label {
|
.label {
|
||||||
margin-left: 0.125rem;
|
margin-left: 0.25rem;
|
||||||
}
|
}
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
border-color: var(--divider-color);
|
border-color: var(--theme-divider-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -42,8 +42,8 @@
|
|||||||
padding: 0.25rem 0.75rem;
|
padding: 0.25rem 0.75rem;
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
background-color: var(--divider-color);
|
background-color: var(--theme-button-enabled);
|
||||||
border-radius: 1.25rem;
|
border-radius: 1.25rem;
|
||||||
user-select: text;
|
user-select: text;
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@
|
|||||||
on:click={handleComponentEditorOpened}
|
on:click={handleComponentEditorOpened}
|
||||||
>
|
>
|
||||||
<svelte:fragment slot="content">
|
<svelte:fragment slot="content">
|
||||||
<span class="label {enlargedText ? 'ml-1 text-base fs-bold' : 'text-md'} overflow-label pointer-events-none">
|
<span class="label {enlargedText ? 'ml-1 text-base' : 'text-md'} overflow-label pointer-events-none">
|
||||||
<Label label={getEmbeddedLabel(componentText)} />
|
<Label label={getEmbeddedLabel(componentText)} />
|
||||||
</span>
|
</span>
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
|
@ -18,14 +18,15 @@
|
|||||||
import { AttachedData, Ref } from '@hcengineering/core'
|
import { AttachedData, Ref } from '@hcengineering/core'
|
||||||
import { getClient } from '@hcengineering/presentation'
|
import { getClient } from '@hcengineering/presentation'
|
||||||
import { Issue, IssueDraft, IssueTemplateData } from '@hcengineering/tracker'
|
import { Issue, IssueDraft, IssueTemplateData } from '@hcengineering/tracker'
|
||||||
import { ButtonKind, ButtonSize, TooltipAlignment } from '@hcengineering/ui'
|
import { ButtonKind, ButtonSize, IconSize, TooltipAlignment } from '@hcengineering/ui'
|
||||||
import { createEventDispatcher } from 'svelte'
|
import { createEventDispatcher } from 'svelte'
|
||||||
import tracker from '../../plugin'
|
import tracker from '../../plugin'
|
||||||
import { getPreviousAssignees } from '../../utils'
|
import { getPreviousAssignees } from '../../utils'
|
||||||
|
|
||||||
export let value: Issue | AttachedData<Issue> | IssueTemplateData | IssueDraft
|
export let value: Issue | AttachedData<Issue> | IssueTemplateData | IssueDraft
|
||||||
export let size: ButtonSize = 'large'
|
|
||||||
export let kind: ButtonKind = 'link'
|
export let kind: ButtonKind = 'link'
|
||||||
|
export let size: ButtonSize = 'large'
|
||||||
|
export let avatarSize: IconSize = 'card'
|
||||||
export let tooltipAlignment: TooltipAlignment | undefined = undefined
|
export let tooltipAlignment: TooltipAlignment | undefined = undefined
|
||||||
export let width: string = '100%'
|
export let width: string = '100%'
|
||||||
export let focusIndex: number | undefined = undefined
|
export let focusIndex: number | undefined = undefined
|
||||||
@ -97,6 +98,7 @@
|
|||||||
titleDeselect={tracker.string.Unassigned}
|
titleDeselect={tracker.string.Unassigned}
|
||||||
{size}
|
{size}
|
||||||
{kind}
|
{kind}
|
||||||
|
{avatarSize}
|
||||||
{width}
|
{width}
|
||||||
showNavigate={false}
|
showNavigate={false}
|
||||||
justify={'left'}
|
justify={'left'}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
import { DueDatePresenter } from '@hcengineering/ui'
|
import { DueDatePresenter } from '@hcengineering/ui'
|
||||||
|
|
||||||
export let value: Issue
|
export let value: Issue
|
||||||
|
export let width: string | undefined = undefined
|
||||||
|
|
||||||
const client = getClient()
|
const client = getClient()
|
||||||
|
|
||||||
@ -39,5 +40,5 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if value}
|
{#if value}
|
||||||
<DueDatePresenter kind={'link'} value={value.dueDate} editable onChange={(e) => handleDueDateChanged(e)} />
|
<DueDatePresenter kind={'link'} value={value.dueDate} {width} editable onChange={(e) => handleDueDateChanged(e)} />
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -87,7 +87,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex-row mt-4 mb-4">
|
<div class="flex-row mt-4 mb-4">
|
||||||
<Label label={tracker.string.StatusHistory} />:
|
<span class="content-dark-color"><Label label={tracker.string.StatusHistory} />:</span>
|
||||||
<table class="ml-2">
|
<table class="ml-2">
|
||||||
{#each displaySt as st}
|
{#each displaySt as st}
|
||||||
<tr>
|
<tr>
|
||||||
@ -95,7 +95,7 @@
|
|||||||
<StatusPresenter value={st.status} />
|
<StatusPresenter value={st.status} />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="ml-2 mr-2">
|
<div class="ml-8 mr-2">
|
||||||
<Duration value={st.duration} />
|
<Duration value={st.duration} />
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
@ -89,9 +89,7 @@
|
|||||||
{#if issuePriorities[value.priority]?.icon}<Icon icon={issuePriorities[value.priority]?.icon} {size} />{/if}
|
{#if issuePriorities[value.priority]?.icon}<Icon icon={issuePriorities[value.priority]?.icon} {size} />{/if}
|
||||||
</div>
|
</div>
|
||||||
{#if shouldShowLabel}
|
{#if shouldShowLabel}
|
||||||
<span
|
<span class="{kind === 'list' ? 'ml-2 text-md' : 'ml-3 text-base'} overflow-label disabled content-color">
|
||||||
class="{kind === 'list' ? 'ml-2 text-md' : 'ml-3 text-base'} overflow-label disabled fs-bold content-color"
|
|
||||||
>
|
|
||||||
<Label label={issuePriorities[value.priority]?.label} />
|
<Label label={issuePriorities[value.priority]?.label} />
|
||||||
</span>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -120,9 +120,7 @@
|
|||||||
{#if selectedStatus}<IssueStatusIcon value={selectedStatus} size={kind === 'list' ? 'small' : 'medium'} />{/if}
|
{#if selectedStatus}<IssueStatusIcon value={selectedStatus} size={kind === 'list' ? 'small' : 'medium'} />{/if}
|
||||||
</div>
|
</div>
|
||||||
{#if selectedStatusLabel}
|
{#if selectedStatusLabel}
|
||||||
<span
|
<span class="{kind === 'list' ? 'ml-1 text-md' : 'ml-2 text-base'} overflow-label disabled content-color">
|
||||||
class="{kind === 'list' ? 'ml-1 text-md' : 'ml-2 text-base'} overflow-label disabled fs-bold content-color"
|
|
||||||
>
|
|
||||||
{selectedStatusLabel}
|
{selectedStatusLabel}
|
||||||
</span>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -93,7 +93,7 @@
|
|||||||
$: account = $employeeAccountByIdStore.get(issue.createdBy as Ref<EmployeeAccount>)
|
$: account = $employeeAccountByIdStore.get(issue.createdBy as Ref<EmployeeAccount>)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="content">
|
<div class="popupPanel-body__aside-grid">
|
||||||
{#if issue.template?.template}
|
{#if issue.template?.template}
|
||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.IssueTemplate} />
|
<Label label={tracker.string.IssueTemplate} />
|
||||||
@ -118,7 +118,7 @@
|
|||||||
<Label label={tracker.string.Status} />
|
<Label label={tracker.string.Status} />
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<StatusEditor value={issue} shouldShowLabel />
|
<StatusEditor value={issue} size={'medium'} shouldShowLabel />
|
||||||
|
|
||||||
{#if issue.blockedBy?.length}
|
{#if issue.blockedBy?.length}
|
||||||
<span class="labelTop">
|
<span class="labelTop">
|
||||||
@ -142,7 +142,7 @@
|
|||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.Priority} />
|
<Label label={tracker.string.Priority} />
|
||||||
</span>
|
</span>
|
||||||
<PriorityEditor value={issue} shouldShowLabel />
|
<PriorityEditor value={issue} size={'medium'} shouldShowLabel />
|
||||||
|
|
||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={core.string.CreatedBy} />
|
<Label label={core.string.CreatedBy} />
|
||||||
@ -151,7 +151,8 @@
|
|||||||
value={employee?._id}
|
value={employee?._id}
|
||||||
label={core.string.CreatedBy}
|
label={core.string.CreatedBy}
|
||||||
kind={'link'}
|
kind={'link'}
|
||||||
size={'large'}
|
size={'medium'}
|
||||||
|
avatarSize={'card'}
|
||||||
width={'100%'}
|
width={'100%'}
|
||||||
showNavigate={false}
|
showNavigate={false}
|
||||||
readonly
|
readonly
|
||||||
@ -160,7 +161,7 @@
|
|||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.Assignee} />
|
<Label label={tracker.string.Assignee} />
|
||||||
</span>
|
</span>
|
||||||
<AssigneeEditor value={issue} />
|
<AssigneeEditor value={issue} size={'medium'} avatarSize={'card'} />
|
||||||
|
|
||||||
<span class="labelTop">
|
<span class="labelTop">
|
||||||
<Label label={tracker.string.Labels} />
|
<Label label={tracker.string.Labels} />
|
||||||
@ -172,12 +173,12 @@
|
|||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.Component} />
|
<Label label={tracker.string.Component} />
|
||||||
</span>
|
</span>
|
||||||
<ComponentEditor value={issue} />
|
<ComponentEditor value={issue} size={'medium'} />
|
||||||
|
|
||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.Sprint} />
|
<Label label={tracker.string.Sprint} />
|
||||||
</span>
|
</span>
|
||||||
<SprintEditor value={issue} />
|
<SprintEditor value={issue} size={'medium'} />
|
||||||
|
|
||||||
{#if issue.dueDate !== null}
|
{#if issue.dueDate !== null}
|
||||||
<div class="divider" />
|
<div class="divider" />
|
||||||
@ -185,13 +186,13 @@
|
|||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.DueDate} />
|
<Label label={tracker.string.DueDate} />
|
||||||
</span>
|
</span>
|
||||||
<DueDateEditor value={issue} />
|
<DueDateEditor value={issue} width={'100%'} />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if keys.length > 0}
|
{#if keys.length > 0}
|
||||||
<div class="divider" />
|
<div class="divider" />
|
||||||
{#each keys as key (typeof key === 'string' ? key : key.key)}
|
{#each keys as key (typeof key === 'string' ? key : key.key)}
|
||||||
<AttributeBarEditor {key} _class={issue._class} object={issue} showHeader={true} size={'large'} />
|
<AttributeBarEditor {key} _class={issue._class} object={issue} showHeader={true} size={'medium'} />
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
@ -203,32 +204,8 @@
|
|||||||
_class={mixin._id}
|
_class={mixin._id}
|
||||||
object={hierarchy.as(issue, mixin._id)}
|
object={hierarchy.as(issue, mixin._id)}
|
||||||
showHeader={true}
|
showHeader={true}
|
||||||
size={'large'}
|
size={'medium'}
|
||||||
/>
|
/>
|
||||||
{/each}
|
{/each}
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
.content {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 1.5fr;
|
|
||||||
grid-auto-flow: row;
|
|
||||||
justify-content: start;
|
|
||||||
align-items: center;
|
|
||||||
gap: 1rem;
|
|
||||||
margin-top: 1rem;
|
|
||||||
width: 100%;
|
|
||||||
height: min-content;
|
|
||||||
}
|
|
||||||
|
|
||||||
.divider {
|
|
||||||
grid-column: 1 / 3;
|
|
||||||
height: 1px;
|
|
||||||
background-color: var(--divider-color);
|
|
||||||
}
|
|
||||||
.labelTop {
|
|
||||||
align-self: start;
|
|
||||||
margin-top: 0.385rem;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
@ -267,13 +267,12 @@
|
|||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
kind={'transparent'}
|
kind={'transparent'}
|
||||||
shape={'round'}
|
|
||||||
selected={showAllMixins}
|
selected={showAllMixins}
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showAllMixins = !showAllMixins
|
showAllMixins = !showAllMixins
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<svelte:fragment slot="content">
|
<svelte:fragment slot="icon">
|
||||||
<IconMixin size={'small'} />
|
<IconMixin size={'small'} />
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
</Button>
|
</Button>
|
||||||
@ -285,7 +284,9 @@
|
|||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="divider" />
|
<div class="divider" />
|
||||||
<IssueStatusActivity {issue} />
|
<div class="issue-stats">
|
||||||
|
<IssueStatusActivity {issue} />
|
||||||
|
</div>
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
</Panel>
|
</Panel>
|
||||||
{/if}
|
{/if}
|
||||||
@ -293,10 +294,14 @@
|
|||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.divider {
|
.divider {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
margin-top: 1rem;
|
margin: 0.5rem 0;
|
||||||
margin-bottom: 1rem;
|
|
||||||
grid-column: 1 / 3;
|
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: var(--divider-color);
|
background-color: var(--theme-divider-color);
|
||||||
|
}
|
||||||
|
.issue-stats {
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin: 0 2rem;
|
||||||
|
min-width: 0;
|
||||||
|
min-height: 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
export let object: Issue
|
export let object: Issue
|
||||||
export let value: number
|
export let value: number
|
||||||
export let kind: 'no-border' | 'link' = 'no-border'
|
export let kind: 'no-border' | 'link' = 'no-border'
|
||||||
|
export let size: 'small' | 'medium' | 'large' = 'large'
|
||||||
export let currentProject: Project | undefined
|
export let currentProject: Project | undefined
|
||||||
|
|
||||||
const spaceQuery = createQuery()
|
const spaceQuery = createQuery()
|
||||||
@ -66,7 +67,7 @@
|
|||||||
|
|
||||||
{#if kind === 'link'}
|
{#if kind === 'link'}
|
||||||
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||||
<div id="ReportedTimeEditor" class="link-container flex-between" on:click={showReports}>
|
<div id="ReportedTimeEditor" class="link-container {size} flex-between" on:click={showReports}>
|
||||||
{#if value !== undefined}
|
{#if value !== undefined}
|
||||||
<span class="overflow-label">
|
<span class="overflow-label">
|
||||||
<TimePresenter {value} />
|
<TimePresenter {value} />
|
||||||
@ -98,12 +99,20 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 0 0.875rem;
|
padding: 0 0.875rem;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 2.25rem;
|
|
||||||
color: var(--theme-caption-color);
|
color: var(--theme-caption-color);
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
|
&.small {
|
||||||
|
height: 1.5rem;
|
||||||
|
}
|
||||||
|
&.medium {
|
||||||
|
height: 2rem;
|
||||||
|
}
|
||||||
|
&.large {
|
||||||
|
height: 2.25rem;
|
||||||
|
}
|
||||||
.add-action {
|
.add-action {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
@ -34,9 +34,8 @@
|
|||||||
.scrumLabel {
|
.scrumLabel {
|
||||||
display: block;
|
display: block;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
font-weight: 500;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
@ -33,9 +33,8 @@
|
|||||||
.scrumRecordLabel {
|
.scrumRecordLabel {
|
||||||
display: block;
|
display: block;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
font-weight: 500;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
@ -149,7 +149,7 @@
|
|||||||
on:click={handleSprintEditorOpened}
|
on:click={handleSprintEditorOpened}
|
||||||
>
|
>
|
||||||
<svelte:fragment slot="content">
|
<svelte:fragment slot="content">
|
||||||
<span class="label {enlargedText ? 'text-base' : 'text-md'} fs-bold overflow-label pointer-events-none">
|
<span class="label {enlargedText ? 'text-base' : 'text-md'} overflow-label pointer-events-none">
|
||||||
<Label label={getEmbeddedLabel(sprintText)} />
|
<Label label={getEmbeddedLabel(sprintText)} />
|
||||||
</span>
|
</span>
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
|
@ -176,27 +176,26 @@
|
|||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.row {
|
.row {
|
||||||
position: relative;
|
position: relative;
|
||||||
border-bottom: 1px solid var(--divider-color);
|
border-bottom: 1px solid var(--theme-divider-color);
|
||||||
|
|
||||||
.text {
|
.text {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.issuePresenter {
|
.issuePresenter {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
font-weight: 500;
|
color: var(--theme-content-color);
|
||||||
color: var(--content-color);
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
&:active {
|
&:active {
|
||||||
color: var(--accent-color);
|
color: var(--theme-caption-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,7 +231,7 @@
|
|||||||
&.is-dragging::before {
|
&.is-dragging::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
content: '';
|
content: '';
|
||||||
background-color: var(--divider-color);
|
background-color: var(--theme-divider-color);
|
||||||
inset: 0;
|
inset: 0;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
}
|
}
|
||||||
|
@ -292,9 +292,6 @@
|
|||||||
{#if template && currentProject}
|
{#if template && currentProject}
|
||||||
<TemplateControlPanel issue={template} />
|
<TemplateControlPanel issue={template} />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="divider" />
|
|
||||||
<!-- <IssueStatusActivity issue={template} /> -->
|
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
</Panel>
|
</Panel>
|
||||||
{/if}
|
{/if}
|
||||||
@ -318,13 +315,6 @@
|
|||||||
color: var(--dark-color);
|
color: var(--dark-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.divider {
|
|
||||||
margin-top: 1rem;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
grid-column: 1 / 3;
|
|
||||||
height: 1px;
|
|
||||||
background-color: var(--divider-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.tool {
|
.tool {
|
||||||
align-self: start;
|
align-self: start;
|
||||||
|
@ -171,27 +171,26 @@
|
|||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.row {
|
.row {
|
||||||
position: relative;
|
position: relative;
|
||||||
border-bottom: 1px solid var(--divider-color);
|
border-bottom: 1px solid var(--theme-divider-color);
|
||||||
|
|
||||||
.text {
|
.text {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.issuePresenter {
|
.issuePresenter {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
font-weight: 500;
|
color: var(--theme-content-color);
|
||||||
color: var(--content-color);
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
&:active {
|
&:active {
|
||||||
color: var(--accent-color);
|
color: var(--theme-caption-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,7 +226,7 @@
|
|||||||
&.is-dragging::before {
|
&.is-dragging::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
content: '';
|
content: '';
|
||||||
background-color: var(--divider-color);
|
background-color: var(--theme-divider-color);
|
||||||
inset: 0;
|
inset: 0;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
}
|
}
|
||||||
|
@ -59,26 +59,25 @@
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
max-width: 15rem;
|
max-width: 15rem;
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
color: var(--content-color);
|
color: var(--theme-content-color);
|
||||||
|
|
||||||
&:not(.noPointer) {
|
&:not(.noPointer) {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.noUnderline {
|
&.noUnderline {
|
||||||
font-weight: 500;
|
color: var(--theme-caption-color);
|
||||||
color: var(--caption-color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&:not(.noUnderline) {
|
&:not(.noUnderline) {
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--caption-color);
|
color: var(--theme-caption-color);
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
color: var(--accent-color);
|
color: var(--theme-caption-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -64,16 +64,16 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="content">
|
<div class="popupPanel-body__aside-grid">
|
||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.Priority} />
|
<Label label={tracker.string.Priority} />
|
||||||
</span>
|
</span>
|
||||||
<PriorityEditor value={issue} shouldShowLabel />
|
<PriorityEditor value={issue} size={'medium'} shouldShowLabel />
|
||||||
|
|
||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.Assignee} />
|
<Label label={tracker.string.Assignee} />
|
||||||
</span>
|
</span>
|
||||||
<AssigneeEditor value={issue} />
|
<AssigneeEditor value={issue} size={'medium'} />
|
||||||
|
|
||||||
<span class="labelTop">
|
<span class="labelTop">
|
||||||
<Label label={tracker.string.Labels} />
|
<Label label={tracker.string.Labels} />
|
||||||
@ -82,7 +82,10 @@
|
|||||||
<Component
|
<Component
|
||||||
is={tags.component.TagsDropdownEditor}
|
is={tags.component.TagsDropdownEditor}
|
||||||
props={{
|
props={{
|
||||||
kind: 'no-border',
|
kind: 'link',
|
||||||
|
size: 'medium',
|
||||||
|
width: '100%',
|
||||||
|
justify: 'left',
|
||||||
items: labelRefs,
|
items: labelRefs,
|
||||||
key,
|
key,
|
||||||
targetClass: tracker.class.Issue,
|
targetClass: tracker.class.Issue,
|
||||||
@ -99,43 +102,19 @@
|
|||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.Component} />
|
<Label label={tracker.string.Component} />
|
||||||
</span>
|
</span>
|
||||||
<ComponentEditor value={issue} />
|
<ComponentEditor value={issue} size={'medium'} />
|
||||||
|
|
||||||
{#if issue.sprint}
|
{#if issue.sprint}
|
||||||
<span class="label">
|
<span class="label">
|
||||||
<Label label={tracker.string.Sprint} />
|
<Label label={tracker.string.Sprint} />
|
||||||
</span>
|
</span>
|
||||||
<SprintEditor value={issue} />
|
<SprintEditor value={issue} size={'medium'} />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if keys.length > 0}
|
{#if keys.length > 0}
|
||||||
<div class="divider" />
|
<div class="divider" />
|
||||||
{#each keys as key (typeof key === 'string' ? key : key.key)}
|
{#each keys as key (typeof key === 'string' ? key : key.key)}
|
||||||
<AttributeBarEditor {key} _class={issue._class} object={issue} showHeader={true} />
|
<AttributeBarEditor {key} _class={issue._class} object={issue} size={'medium'} showHeader={true} />
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
.content {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 1.5fr;
|
|
||||||
grid-auto-flow: row;
|
|
||||||
justify-content: start;
|
|
||||||
align-items: center;
|
|
||||||
gap: 1rem;
|
|
||||||
margin-top: 1rem;
|
|
||||||
width: 100%;
|
|
||||||
height: min-content;
|
|
||||||
}
|
|
||||||
|
|
||||||
.divider {
|
|
||||||
grid-column: 1 / 3;
|
|
||||||
height: 1px;
|
|
||||||
background-color: var(--divider-color);
|
|
||||||
}
|
|
||||||
.labelTop {
|
|
||||||
align-self: start;
|
|
||||||
margin-top: 0.385rem;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
@ -35,8 +35,7 @@
|
|||||||
width: 1.6rem;
|
width: 1.6rem;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
text-transform: capitalize;
|
text-transform: capitalize;
|
||||||
font-weight: 500;
|
color: var(--theme-caption-color);
|
||||||
color: var(--caption-color);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
<Button
|
<Button
|
||||||
icon={setting.icon.Setting}
|
icon={setting.icon.Setting}
|
||||||
kind={'link'}
|
kind={'link'}
|
||||||
size={'large'}
|
size={'medium'}
|
||||||
showTooltip={{ label: setting.string.ClassSetting }}
|
showTooltip={{ label: setting.string.ClassSetting }}
|
||||||
on:click={(ev) => {
|
on:click={(ev) => {
|
||||||
ev.stopPropagation()
|
ev.stopPropagation()
|
||||||
@ -104,17 +104,19 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin: 0.25rem -0.5rem 0.75rem;
|
padding: 0 0.75rem;
|
||||||
padding: 0 0 0 0.5rem;
|
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: var(--theme-dark-color);
|
color: var(--theme-dark-color);
|
||||||
border: 1px solid var(--theme-divider-color);
|
border-top: 1px solid var(--theme-divider-color);
|
||||||
border-radius: 0.25rem;
|
border-bottom: 1px solid var(--theme-divider-color);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition-property: color, background-color, border-color;
|
transition-property: color, background-color, border-color;
|
||||||
transition-duration: 0.15s;
|
transition-duration: 0.15s;
|
||||||
transition-timing-function: var(--timing-main);
|
transition-timing-function: var(--timing-main);
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
border-top-color: transparent;
|
||||||
|
}
|
||||||
.icon-arrow {
|
.icon-arrow {
|
||||||
margin-left: 0.5rem;
|
margin-left: 0.5rem;
|
||||||
width: 0.325rem;
|
width: 0.325rem;
|
||||||
|
@ -300,8 +300,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
|
|
||||||
<svelte:fragment slot="attributes" let:direction={dir}>
|
<svelte:fragment slot="aside-tabs">
|
||||||
<div class="flex flex-reverse flex-no-shrink clear-mins">
|
<div class="flex-row-center flex-reverse flex-grow">
|
||||||
<Button
|
<Button
|
||||||
kind={'transparent'}
|
kind={'transparent'}
|
||||||
shape={'round'}
|
shape={'round'}
|
||||||
@ -310,11 +310,13 @@
|
|||||||
showAllMixins = !showAllMixins
|
showAllMixins = !showAllMixins
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<svelte:fragment slot="content">
|
<svelte:fragment slot="icon">
|
||||||
<IconMixin size={'small'} />
|
<IconMixin size={'small'} />
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
</svelte:fragment>
|
||||||
|
<svelte:fragment slot="attributes" let:direction={dir}>
|
||||||
{#if !headerLoading}
|
{#if !headerLoading}
|
||||||
{#if headerEditor !== undefined}
|
{#if headerEditor !== undefined}
|
||||||
<Component
|
<Component
|
||||||
@ -338,7 +340,7 @@
|
|||||||
|
|
||||||
<svelte:fragment slot="subheader">
|
<svelte:fragment slot="subheader">
|
||||||
{#if mainEditor && mainEditor.pinned}
|
{#if mainEditor && mainEditor.pinned}
|
||||||
<div class="flex-col flex-grow step-tb-6">
|
<div class="flex-col flex-grow my-4 step-tb-6">
|
||||||
<Component is={mainEditor.editor} props={{ object }} on:open={handleOpen} />
|
<Component is={mainEditor.editor} props={{ object }} on:open={handleOpen} />
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -82,11 +82,10 @@
|
|||||||
|
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
|
||||||
font-weight: 500;
|
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
|
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
color: #ffffff;
|
color: var(--theme-caption-color);
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
Loading…
Reference in New Issue
Block a user