@fewangsit/wangsvue 1.5.199-alpha.9 → 1.5.200-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -34,7 +34,7 @@ export interface TreeNode {
34
34
  /**
35
35
  * Mandatory unique key of the node.
36
36
  */
37
- key: number;
37
+ key: string;
38
38
  /**
39
39
  * Label of the node.
40
40
  */
@@ -156,6 +156,18 @@ export interface TreeFilterEvent {
156
156
  value: string;
157
157
  }
158
158
 
159
+ export interface TreeCheckboxChangeEvent {
160
+ node: TreeNode;
161
+ check: boolean;
162
+ selectionKeys: TreeSelectionKeys;
163
+ }
164
+
165
+ export interface TreeNodeClickEvent {
166
+ node: TreeNode;
167
+ nodeTouched: boolean;
168
+ originalEvent: PointerEvent;
169
+ }
170
+
159
171
  /**
160
172
  * Custom passthrough(pt) options.
161
173
  * @see {@link TreeProps.pt}
@@ -15,6 +15,8 @@ export interface TreeNodeProps extends BaseTreeProps {
15
15
  * List of labels that has no menu option
16
16
  */
17
17
  listLabelsNoOption?: string[];
18
+ pt?: any;
19
+ templates?: any;
18
20
  }
19
21
 
20
22
  export interface TreeNodeEmits {
@@ -40,9 +40,7 @@ export type SprintDetail = Omit<Sprint, 'finishedAt'> & {
40
40
  finishAt: number;
41
41
  sprintInterval: number;
42
42
  sprintIntervalUnit: string;
43
- productBacklogItems: (Pick<Pbi, '_id' | 'name' | 'status'> & {
44
- canViewDetail?: boolean;
45
- })[];
43
+ productBacklogItems: Pick<Pbi, '_id' | 'name' | 'status'>[];
46
44
  };
47
45
 
48
46
  export interface PbiOptions {
@@ -0,0 +1,23 @@
1
+ import { Pbi } from '../dialogdetailpbi/DialogDetailPbi.vue.d';
2
+ import { ClassComponent } from '../.././components/ts-helpers';
3
+
4
+
5
+ export interface DialogPreparePbiProps {
6
+ projectId: string;
7
+ selectedPbi: Pbi | undefined;
8
+ }
9
+
10
+ export type DialogPreparePbiEmits = {
11
+ /**
12
+ * Emit on reloading the task table
13
+ */
14
+ reloadTable: [];
15
+ };
16
+
17
+ declare class DialogPreparePbi extends ClassComponent<
18
+ DialogPreparePbiProps,
19
+ unknown,
20
+ DialogPreparePbiEmits
21
+ > {}
22
+
23
+ export default DialogPreparePbi;
@@ -16,6 +16,12 @@ type PbiStatus =
16
16
 
17
17
  type Platform = 'Web' | 'Mobile';
18
18
 
19
+ type PbiMemberDetail = {
20
+ sprintNumber: number;
21
+ member: Pick<User, '_id' | 'nickName'>;
22
+ date: string;
23
+ };
24
+
19
25
  export type Pbi = {
20
26
  _id: string;
21
27
  name: string;
@@ -41,6 +47,10 @@ export type Pbi = {
41
47
  isMemberAssigned: boolean;
42
48
  platform: Platform;
43
49
  totalBug?: number;
50
+ hasTimerStart?: boolean;
51
+ canViewDetail?: boolean;
52
+ timerEndDate?: string;
53
+ memberDetails?: PbiMemberDetail[];
44
54
  };
45
55
 
46
56
  export type TaskStatus =
@@ -1,5 +1,7 @@
1
1
  import { AssignedMember, Pbi } from './DialogDetailPbi.vue.d';
2
+ import { Project } from 'types/project.type';
2
3
  declare let __VLS_typeProps: {
4
+ project: Project | undefined;
3
5
  selectedPbi?: Pbi;
4
6
  assignedMembers?: AssignedMember[];
5
7
  };
@@ -1,6 +1,6 @@
1
1
  import { GenericObject } from 'vee-validate';
2
2
  import { Slot } from 'vue';
3
- import { FormPayload, FormProps } from '../form/Form.vue.d';
3
+ import FormInstance, { FormPayload, FormProps } from '../form/Form.vue.d';
4
4
  import { WangsIcons } from '../icon/Icon.vue.d';
5
5
  import { ClassComponent, GlobalComponentConstructor } from '../ts-helpers';
6
6
 
@@ -313,7 +313,7 @@ declare class DialogForm extends ClassComponent<
313
313
  /**
314
314
  * The ref of form element.
315
315
  */
316
- form: HTMLFormElement;
316
+ form: FormInstance;
317
317
  }
318
318
 
319
319
  declare module '@vue/runtime-core' {
@@ -31,6 +31,18 @@ declare const _default: import('vue').DefineComponent<{
31
31
  type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["deleteNode"]>;
32
32
  required: true;
33
33
  };
34
+ view: {
35
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["view"]>;
36
+ required: true;
37
+ };
38
+ innerDecorations: {
39
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["innerDecorations"]>;
40
+ required: true;
41
+ };
42
+ HTMLAttributes: {
43
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["HTMLAttributes"]>;
44
+ required: true;
45
+ };
34
46
  }, {}, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
35
47
  editor: {
36
48
  type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["editor"]>;
@@ -64,5 +76,17 @@ declare const _default: import('vue').DefineComponent<{
64
76
  type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["deleteNode"]>;
65
77
  required: true;
66
78
  };
79
+ view: {
80
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["view"]>;
81
+ required: true;
82
+ };
83
+ innerDecorations: {
84
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["innerDecorations"]>;
85
+ required: true;
86
+ };
87
+ HTMLAttributes: {
88
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["HTMLAttributes"]>;
89
+ required: true;
90
+ };
67
91
  }>>, {}, {}>;
68
92
  export default _default;
@@ -31,6 +31,18 @@ declare const _default: import('vue').DefineComponent<{
31
31
  type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["deleteNode"]>;
32
32
  required: true;
33
33
  };
34
+ view: {
35
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["view"]>;
36
+ required: true;
37
+ };
38
+ innerDecorations: {
39
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["innerDecorations"]>;
40
+ required: true;
41
+ };
42
+ HTMLAttributes: {
43
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["HTMLAttributes"]>;
44
+ required: true;
45
+ };
34
46
  }, {}, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
35
47
  editor: {
36
48
  type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["editor"]>;
@@ -64,5 +76,17 @@ declare const _default: import('vue').DefineComponent<{
64
76
  type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["deleteNode"]>;
65
77
  required: true;
66
78
  };
79
+ view: {
80
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["view"]>;
81
+ required: true;
82
+ };
83
+ innerDecorations: {
84
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["innerDecorations"]>;
85
+ required: true;
86
+ };
87
+ HTMLAttributes: {
88
+ type: import('vue').PropType<import('@tiptap/vue-3').NodeViewProps["HTMLAttributes"]>;
89
+ required: true;
90
+ };
67
91
  }>>, {}, {}>;
68
92
  export default _default;
@@ -5,6 +5,7 @@ import { QueryParams } from '../datatable/DataTable.vue.d';
5
5
  import { DropdownProps } from '../dropdown/Dropdown.vue.d';
6
6
  import { InputRangeNumberProps } from '../inputrangenumber/InputRangeNumber.vue.d';
7
7
  import { MultiSelectProps } from '../multiselect/MultiSelect.vue.d';
8
+ import { ButtonSelectTreeProps } from '../buttonselecttree/ButtonSelectTree.vue.d';
8
9
 
9
10
  // More specific filter field types
10
11
  export interface MultiSelectFilterField extends MultiSelectProps {
@@ -34,12 +35,30 @@ export interface RangeNumberFilterField extends InputRangeNumberProps {
34
35
  tooltip?: string;
35
36
  }
36
37
 
38
+ export interface ButtonSelectTreeFilterField
39
+ extends Omit<ButtonSelectTreeProps, 'type' | 'label' | 'fieldLabel'> {
40
+ type: 'group' | 'category';
41
+ field: string; // The name of the field this filter applies to
42
+ /**
43
+ * The field label.
44
+ */
45
+ label?: string;
46
+ /**
47
+ * The button label.
48
+ * @default to Select Group|Category
49
+ */
50
+ buttonLabel?: string;
51
+ }
52
+
37
53
  export interface CalendarFilterField extends CalendarProps {
38
54
  type: 'calendar';
39
55
  field: string;
40
56
  }
41
57
 
58
+ export type AdditionalFilterField = ButtonSelectTreeFilterField;
59
+
42
60
  export type FilterField =
61
+ | AdditionalFilterField
43
62
  | MultiSelectFilterField
44
63
  | DropdownFilterField
45
64
  | RangeNumberFilterField
@@ -86,6 +105,11 @@ export type FilterContainerSlots = {
86
105
  * @deprecated Please use props.fields instead
87
106
  */
88
107
  default: Slot;
108
+
109
+ /**
110
+ * Additional template for field.
111
+ */
112
+ field: Slot<{ field: AdditionalFilterField }>;
89
113
  };
90
114
 
91
115
  export type FilterContainerEmits = {
@@ -79,6 +79,7 @@ export type WangsIcons =
79
79
  | 'file-history-fill'
80
80
  | 'file-info'
81
81
  | 'files'
82
+ | 'file-lines'
82
83
  | 'file-list-2'
83
84
  | 'file-list'
84
85
  | 'file-settings'
@@ -97,6 +98,7 @@ export type WangsIcons =
97
98
  | 'indeterminate-circle-fill'
98
99
  | 'info'
99
100
  | 'information-line'
101
+ | 'infrared-thermometer'
100
102
  | 'list-check'
101
103
  | 'link'
102
104
  | 'luggage-cart'
@@ -202,9 +202,10 @@ export interface ImageProps {
202
202
  * medium: 80
203
203
  * big: 125
204
204
  *
205
- * @default 'big' - For other size use class
205
+ * @default to 'big' or {@link width} - When the props.width specified, the size will use this value
206
206
  */
207
207
  size?: 'small' | 'medium' | 'big';
208
+
208
209
  /**
209
210
  * Set custom size in pixels (without 'px')
210
211
  * @example 30
@@ -10,6 +10,7 @@ export { default as DialogDetailPbi } from './dialogdetailpbi/DialogDetailPbi.vu
10
10
  export { default as TaskDetailPbi } from './dialogdetailpbi/TaskDetailPbi.vue';
11
11
  export { default as DetailMember } from './detailmember/DetailMember.vue';
12
12
  export { default as DetailSprint } from './detailsprint/DetailSprint.vue';
13
+ export { default as DialogPreparePbi } from './detailsprint/DialogPreparePbi.vue';
13
14
  export { default as DialogAdjustmentTask } from './dialogAdjustmentTask/DialogAdjustmentTask.vue';
14
15
  export { default as TaskDetail } from './taskdetail/TaskDetail.vue';
15
16
  export { default as TaskTable } from './tasktable/TaskTable.vue';
@@ -17,6 +18,7 @@ export { default as NotificationItem } from './notificationitem/NotificationItem
17
18
  export { default as DialogImprovementTask } from './dialogimprovementtask/DialogImprovementTask.vue';
18
19
  export { default as Comment } from './comment/Comment.vue';
19
20
  export { default as Calendar } from '.././components/calendar/Calendar.vue';
21
+ export { default as FilterContainer } from '.././components/filtercontainer/FilterContainer.vue';
20
22
  export { default as Animation } from './animation/Animation.vue';
21
23
  export { default as ApproverInfo } from './approverinfo/ApproverInfo.vue';
22
24
  export { default as Badge } from './badge/Badge.vue';
@@ -40,7 +42,6 @@ export { default as DialogForm } from './dialogform/DialogForm.vue';
40
42
  export { default as Dropdown } from './dropdown/Dropdown.vue';
41
43
  export { default as Editor } from './editor/Editor.vue';
42
44
  export { default as FileUpload } from './fileupload/FileUpload.vue';
43
- export { default as FilterContainer } from './filtercontainer/FilterContainer.vue';
44
45
  export { default as Form } from './form/Form.vue';
45
46
  export { default as Icon } from './icon/Icon.vue';
46
47
  export { default as Image } from './image/Image.vue';
@@ -33,6 +33,13 @@ export declare type MenuPassThroughTransitionType =
33
33
  | ((options: MenuPassThroughMethodOptions) => TransitionProps)
34
34
  | undefined;
35
35
 
36
+ export interface MenuLocaleConfig {
37
+ /**
38
+ * The label of menu when no selectable menu available.
39
+ */
40
+ noOptionLabel?: string;
41
+ }
42
+
36
43
  /**
37
44
  * Custom passthrough(pt) option method.
38
45
  */
@@ -4,7 +4,9 @@ import { MenuItem } from '../../menuitem';
4
4
  * If no visible menu items are found, it returns a menu with a label 'No Option Available'.
5
5
  *
6
6
  * @param menuItems - The array of menu items to filter.
7
+ * @param noOptionLabel - The label of menu to be shown when no available option. The value is from locale configuration each project.
8
+ *
7
9
  * @returns - The array of visible menu items or an array with a single menu item with label 'No Option Available'.
8
10
  */
9
- declare const filterVisibleMenu: (menuItems: MenuItem[]) => MenuItem[];
11
+ declare const filterVisibleMenu: (menuItems: MenuItem[], noOptionLabel?: string) => MenuItem[];
10
12
  export default filterVisibleMenu;
@@ -0,0 +1,19 @@
1
+ import { MenuRouterBindProps } from '../menu/Menu.vue.d';
2
+ import { MenuItem } from '.';
3
+ declare const _default: import('vue').DefineComponent<__VLS_TypePropsToOption<{
4
+ item: MenuItem;
5
+ routerProps: MenuRouterBindProps;
6
+ }>, {}, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToOption<{
7
+ item: MenuItem;
8
+ routerProps: MenuRouterBindProps;
9
+ }>>>, {}, {}>;
10
+ export default _default;
11
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
12
+ type __VLS_TypePropsToOption<T> = {
13
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
14
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
15
+ } : {
16
+ type: import('vue').PropType<T[K]>;
17
+ required: true;
18
+ };
19
+ };
@@ -35,6 +35,7 @@ export type NotificationItemType = {
35
35
  | 'Quality Control'
36
36
  | 'Quality Control PBI'
37
37
  | 'PBI'
38
+ | 'PBI Task'
38
39
  | 'Sprint'
39
40
  | 'Improvement'
40
41
  | 'Task Improvement';
@@ -1,10 +1,12 @@
1
1
  import { TaskChecklist } from '../../../../../types/task.type';
2
2
  declare const _default: import('vue').DefineComponent<__VLS_TypePropsToOption<{
3
3
  static?: boolean;
4
+ taskIdProp?: string;
4
5
  }>, {}, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
5
6
  updated: (checklists: TaskChecklist[]) => void;
6
7
  }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToOption<{
7
8
  static?: boolean;
9
+ taskIdProp?: string;
8
10
  }>>> & {
9
11
  onUpdated?: (checklists: TaskChecklist[]) => any;
10
12
  }, {}, {}>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fewangsit/wangsvue",
3
- "version": "1.5.199-alpha.9",
3
+ "version": "1.5.200-alpha.0",
4
4
  "author": "fewangsit",
5
5
  "description": "Wangsit VueJS Component Library",
6
6
  "module": "./wangsvue.es.js",
@@ -20,6 +20,7 @@ import { OverlayPanelPassThroughOptions } from '../components/overlaypanel/Overl
20
20
  import { InputURLProps } from '../components/inputurl/InputURL.vue.d';
21
21
  import { InputEmailProps } from '../components/inputemail/InputEmail.vue.d';
22
22
  import { ImageProps } from '../components/image/Image.vue.d';
23
+ import { MenuLocaleConfig } from '../components/menu/Menu.vue.d';
23
24
  /**
24
25
  * A Record of component names with theirs props interface
25
26
  */
@@ -47,6 +48,7 @@ interface ComponentLocaleConfig {
47
48
  InputPhoneNumber?: InputPhoneNumberLocaleConfig;
48
49
  InputNumber?: InputNumberLocaleConfig;
49
50
  Calendar?: CalendarLocaleConfig;
51
+ Menu?: MenuLocaleConfig;
50
52
  }
51
53
  export interface LocaleConfig {
52
54
  global: Partial<PrimeVueLocaleOptions>;
package/style.css CHANGED
@@ -10,4 +10,4 @@ html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-
10
10
  Updated for @stackoverflow/stacks v0.64.0
11
11
  Code Blocks: /blob/v0.64.0/lib/css/components/_stacks-code-blocks.less
12
12
  Colors: /blob/v0.64.0/lib/css/exports/_stacks-constants-colors.less
13
- */.hljs{color:#2f3337;background:#f6f6f6}.hljs-subst{color:#2f3337}.hljs-comment{color:#656e77}.hljs-keyword,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-section,.hljs-attr{color:#015692}.hljs-attribute{color:#803378}.hljs-name,.hljs-type,.hljs-number,.hljs-selector-id,.hljs-quote,.hljs-template-tag{color:#b75501}.hljs-selector-class{color:#015692}.hljs-string,.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr{color:#54790d}.hljs-meta,.hljs-selector-pseudo{color:#015692}.hljs-built_in,.hljs-title,.hljs-literal{color:#b75501}.hljs-bullet,.hljs-code{color:#535a60}.hljs-meta .hljs-string{color:#54790d}.hljs-deletion{color:#c02d2e}.hljs-addition{color:#2f6f44}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.cropper-event-notification[data-v-b3a0d4df]{background:#0009;color:#fff;position:absolute;left:0;top:0;bottom:0;right:0;display:flex;justify-content:center;align-items:center;text-align:center;font-size:20px;transition:opacity .5s;opacity:0;pointer-events:none;padding-left:50px;padding-right:50px}.cropper-event-notification--visible[data-v-b3a0d4df]{transition:opacity .25s!important;pointer-events:all!important;opacity:1!important}.vue-advanced-cropper{text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;max-height:100%;max-width:100%;direction:ltr}.vue-advanced-cropper__stretcher{pointer-events:none;position:relative;max-width:100%;max-height:100%}.vue-advanced-cropper__image{-webkit-user-select:none;-moz-user-select:none;user-select:none;position:absolute;transform-origin:center;max-width:none!important}.vue-advanced-cropper__background,.vue-advanced-cropper__foreground{opacity:1;background:#000;transform:translate(-50%,-50%);position:absolute;top:50%;left:50%}.vue-advanced-cropper__foreground{opacity:.5}.vue-advanced-cropper__boundaries{opacity:1;transform:translate(-50%,-50%);position:absolute;left:50%;top:50%}.vue-advanced-cropper__cropper-wrapper{width:100%;height:100%}.vue-advanced-cropper__image-wrapper{overflow:hidden;position:absolute;width:100%;height:100%}.vue-advanced-cropper__stencil-wrapper{position:absolute}.vue-simple-handler{display:block;background:#fff;height:10px;width:10px}.vue-handler-wrapper{position:absolute;transform:translate(-50%,-50%);width:30px;height:30px}.vue-handler-wrapper__draggable{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.vue-handler-wrapper--west-north{cursor:nw-resize}.vue-handler-wrapper--north{cursor:n-resize}.vue-handler-wrapper--east-north{cursor:ne-resize}.vue-handler-wrapper--east{cursor:e-resize}.vue-handler-wrapper--east-south{cursor:se-resize}.vue-handler-wrapper--south{cursor:s-resize}.vue-handler-wrapper--west-south{cursor:sw-resize}.vue-handler-wrapper--west{cursor:w-resize}.vue-handler-wrapper--disabled{cursor:auto}.vue-line-wrapper{background:none;position:absolute;display:flex;align-items:center;justify-content:center}.vue-line-wrapper--north,.vue-line-wrapper--south{height:12px;width:100%;left:0;transform:translateY(-50%)}.vue-line-wrapper--north{top:0;cursor:n-resize}.vue-line-wrapper--south{top:100%;cursor:s-resize}.vue-line-wrapper--east,.vue-line-wrapper--west{width:12px;height:100%;transform:translate(-50%);top:0}.vue-line-wrapper--east{left:100%;cursor:e-resize}.vue-line-wrapper--west{left:0;cursor:w-resize}.vue-line-wrapper--disabled{cursor:auto}.vue-bounding-box{position:relative;height:100%;width:100%}.vue-bounding-box__handler{position:absolute}.vue-bounding-box__handler--west-north{left:0;top:0}.vue-bounding-box__handler--north{left:50%;top:0}.vue-bounding-box__handler--east-north{left:100%;top:0}.vue-bounding-box__handler--east{left:100%;top:50%}.vue-bounding-box__handler--east-south{left:100%;top:100%}.vue-bounding-box__handler--south{left:50%;top:100%}.vue-bounding-box__handler--west-south{left:0;top:100%}.vue-bounding-box__handler--west{left:0;top:50%}.vue-draggable-area{position:relative}.vue-preview-result{overflow:hidden;box-sizing:border-box;position:absolute;height:100%;width:100%}.vue-preview-result__wrapper{position:absolute}.vue-preview-result__image{pointer-events:none;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;transform-origin:center;max-width:none!important}.vue-rectangle-stencil{position:absolute;height:100%;width:100%;box-sizing:border-box}.vue-rectangle-stencil__preview{position:absolute;width:100%;height:100%}.vue-rectangle-stencil--movable{cursor:move}.vue-circle-stencil{position:absolute;height:100%;width:100%;box-sizing:content-box;cursor:move}.vue-circle-stencil__preview{border-radius:50%;position:absolute;width:100%;height:100%}.vue-circle-stencil--movable{cursor:move}.vue-preview{overflow:hidden;box-sizing:border-box;position:relative}.vue-preview--fill{width:100%;height:100%;position:absolute}.vue-preview__wrapper{position:absolute;height:100%;width:100%}.vue-preview__image{pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;transform-origin:center;max-width:none!important}.vue-simple-line{background:none;transition:border .5s;border-color:#ffffff4d;border-width:0;border-style:solid}.vue-simple-line--south,.vue-simple-line--north{height:0;width:100%}.vue-simple-line--east,.vue-simple-line--west{height:100%;width:0}.vue-simple-line--east{border-right-width:1px}.vue-simple-line--west{border-left-width:1px}.vue-simple-line--south{border-bottom-width:1px}.vue-simple-line--north{border-top-width:1px}.vue-simple-line--hover{opacity:1;border-color:#fff}body.loading,body.loading *{overflow:hidden}.wrap-text[data-v-5557db8b]{white-space:nowrap;word-wrap:break-word;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap}.scrollbar-hide[data-v-862afeeb]::-webkit-scrollbar{display:none}.scrollbar-hide[data-v-862afeeb]{-ms-overflow-style:none;scrollbar-width:none}.slide-fade-enter-active[data-v-0d731f6d]{transition:all .3s ease-out}.slide-fade-leave-active[data-v-0d731f6d]{transition:all .3s ease-in-out}.slide-fade-enter-from[data-v-0d731f6d],.slide-fade-leave-to[data-v-0d731f6d]{transform:translateY(-15px);opacity:0}.detailtask-scrollbar-hide::-webkit-scrollbar{display:none}.detailtask-scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}
13
+ */.hljs{color:#2f3337;background:#f6f6f6}.hljs-subst{color:#2f3337}.hljs-comment{color:#656e77}.hljs-keyword,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-section,.hljs-attr{color:#015692}.hljs-attribute{color:#803378}.hljs-name,.hljs-type,.hljs-number,.hljs-selector-id,.hljs-quote,.hljs-template-tag{color:#b75501}.hljs-selector-class{color:#015692}.hljs-string,.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr{color:#54790d}.hljs-meta,.hljs-selector-pseudo{color:#015692}.hljs-built_in,.hljs-title,.hljs-literal{color:#b75501}.hljs-bullet,.hljs-code{color:#535a60}.hljs-meta .hljs-string{color:#54790d}.hljs-deletion{color:#c02d2e}.hljs-addition{color:#2f6f44}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.cropper-event-notification[data-v-b3a0d4df]{background:#0009;color:#fff;position:absolute;left:0;top:0;bottom:0;right:0;display:flex;justify-content:center;align-items:center;text-align:center;font-size:20px;transition:opacity .5s;opacity:0;pointer-events:none;padding-left:50px;padding-right:50px}.cropper-event-notification--visible[data-v-b3a0d4df]{transition:opacity .25s!important;pointer-events:all!important;opacity:1!important}.vue-advanced-cropper{text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;max-height:100%;max-width:100%;direction:ltr}.vue-advanced-cropper__stretcher{pointer-events:none;position:relative;max-width:100%;max-height:100%}.vue-advanced-cropper__image{-webkit-user-select:none;-moz-user-select:none;user-select:none;position:absolute;transform-origin:center;max-width:none!important}.vue-advanced-cropper__background,.vue-advanced-cropper__foreground{opacity:1;background:#000;transform:translate(-50%,-50%);position:absolute;top:50%;left:50%}.vue-advanced-cropper__foreground{opacity:.5}.vue-advanced-cropper__boundaries{opacity:1;transform:translate(-50%,-50%);position:absolute;left:50%;top:50%}.vue-advanced-cropper__cropper-wrapper{width:100%;height:100%}.vue-advanced-cropper__image-wrapper{overflow:hidden;position:absolute;width:100%;height:100%}.vue-advanced-cropper__stencil-wrapper{position:absolute}.vue-simple-handler{display:block;background:#fff;height:10px;width:10px}.vue-handler-wrapper{position:absolute;transform:translate(-50%,-50%);width:30px;height:30px}.vue-handler-wrapper__draggable{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.vue-handler-wrapper--west-north{cursor:nw-resize}.vue-handler-wrapper--north{cursor:n-resize}.vue-handler-wrapper--east-north{cursor:ne-resize}.vue-handler-wrapper--east{cursor:e-resize}.vue-handler-wrapper--east-south{cursor:se-resize}.vue-handler-wrapper--south{cursor:s-resize}.vue-handler-wrapper--west-south{cursor:sw-resize}.vue-handler-wrapper--west{cursor:w-resize}.vue-handler-wrapper--disabled{cursor:auto}.vue-line-wrapper{background:none;position:absolute;display:flex;align-items:center;justify-content:center}.vue-line-wrapper--north,.vue-line-wrapper--south{height:12px;width:100%;left:0;transform:translateY(-50%)}.vue-line-wrapper--north{top:0;cursor:n-resize}.vue-line-wrapper--south{top:100%;cursor:s-resize}.vue-line-wrapper--east,.vue-line-wrapper--west{width:12px;height:100%;transform:translate(-50%);top:0}.vue-line-wrapper--east{left:100%;cursor:e-resize}.vue-line-wrapper--west{left:0;cursor:w-resize}.vue-line-wrapper--disabled{cursor:auto}.vue-bounding-box{position:relative;height:100%;width:100%}.vue-bounding-box__handler{position:absolute}.vue-bounding-box__handler--west-north{left:0;top:0}.vue-bounding-box__handler--north{left:50%;top:0}.vue-bounding-box__handler--east-north{left:100%;top:0}.vue-bounding-box__handler--east{left:100%;top:50%}.vue-bounding-box__handler--east-south{left:100%;top:100%}.vue-bounding-box__handler--south{left:50%;top:100%}.vue-bounding-box__handler--west-south{left:0;top:100%}.vue-bounding-box__handler--west{left:0;top:50%}.vue-draggable-area{position:relative}.vue-preview-result{overflow:hidden;box-sizing:border-box;position:absolute;height:100%;width:100%}.vue-preview-result__wrapper{position:absolute}.vue-preview-result__image{pointer-events:none;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;transform-origin:center;max-width:none!important}.vue-rectangle-stencil{position:absolute;height:100%;width:100%;box-sizing:border-box}.vue-rectangle-stencil__preview{position:absolute;width:100%;height:100%}.vue-rectangle-stencil--movable{cursor:move}.vue-circle-stencil{position:absolute;height:100%;width:100%;box-sizing:content-box;cursor:move}.vue-circle-stencil__preview{border-radius:50%;position:absolute;width:100%;height:100%}.vue-circle-stencil--movable{cursor:move}.vue-preview{overflow:hidden;box-sizing:border-box;position:relative}.vue-preview--fill{width:100%;height:100%;position:absolute}.vue-preview__wrapper{position:absolute;height:100%;width:100%}.vue-preview__image{pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;transform-origin:center;max-width:none!important}.vue-simple-line{background:none;transition:border .5s;border-color:#ffffff4d;border-width:0;border-style:solid}.vue-simple-line--south,.vue-simple-line--north{height:0;width:100%}.vue-simple-line--east,.vue-simple-line--west{height:100%;width:0}.vue-simple-line--east{border-right-width:1px}.vue-simple-line--west{border-left-width:1px}.vue-simple-line--south{border-bottom-width:1px}.vue-simple-line--north{border-top-width:1px}.vue-simple-line--hover{opacity:1;border-color:#fff}body.loading,body.loading *{overflow:hidden}.wrap-text[data-v-5557db8b]{white-space:nowrap;word-wrap:break-word;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap}.scrollbar-hide[data-v-a30e8991]::-webkit-scrollbar{display:none}.scrollbar-hide[data-v-a30e8991]{-ms-overflow-style:none;scrollbar-width:none}.slide-fade-enter-active[data-v-0d731f6d]{transition:all .3s ease-out}.slide-fade-leave-active[data-v-0d731f6d]{transition:all .3s ease-in-out}.slide-fade-enter-from[data-v-0d731f6d],.slide-fade-leave-to[data-v-0d731f6d]{transform:translateY(-15px);opacity:0}.detailtask-scrollbar-hide::-webkit-scrollbar{display:none}.detailtask-scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}
@@ -15,3 +15,9 @@ export declare const formatISODate: (date: string | Date) => string;
15
15
  * @returns The formatted date string.
16
16
  */
17
17
  export declare const formatDateReadable: (date: Date, maxSeconds?: number) => string;
18
+ export declare const getRemainingTime: (deadline: string) => {
19
+ seconds: number;
20
+ days: number;
21
+ hours: number;
22
+ minutes: number;
23
+ };