@dxtmisha/constructor 0.23.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.
- package/LICENSE +21 -0
- package/README.md +136 -0
- package/package.json +124 -0
- package/src/classes/CaptionInclude.ts +71 -0
- package/src/classes/DescriptionInclude.ts +70 -0
- package/src/classes/EnabledInclude.ts +56 -0
- package/src/classes/EventClickInclude.ts +138 -0
- package/src/classes/LabelHighlightInclude.ts +90 -0
- package/src/classes/LabelInclude.ts +171 -0
- package/src/classes/LabelNumberInclude.ts +70 -0
- package/src/classes/ModelInclude.ts +49 -0
- package/src/classes/PrefixInclude.ts +71 -0
- package/src/classes/SuffixInclude.ts +71 -0
- package/src/classes/field/FieldAttributesInclude.ts +100 -0
- package/src/classes/field/FieldChangeInclude.ts +52 -0
- package/src/classes/field/FieldCodeInclude.ts +69 -0
- package/src/classes/field/FieldElementInclude.ts +97 -0
- package/src/classes/field/FieldInputCheckInclude.ts +128 -0
- package/src/classes/field/FieldMatchInclude.ts +101 -0
- package/src/classes/field/FieldPatternInclude.ts +42 -0
- package/src/classes/field/FieldTypeInclude.ts +42 -0
- package/src/classes/field/FieldValidationInclude.ts +196 -0
- package/src/classes/field/FieldValueInclude.ts +318 -0
- package/src/classes/field/FieldVisibilityInclude.ts +21 -0
- package/src/constructors/Badge/Badge.ts +73 -0
- package/src/constructors/Badge/BadgeDesign.tsx +127 -0
- package/src/constructors/Badge/BadgeInclude.ts +78 -0
- package/src/constructors/Badge/basicTypes.ts +15 -0
- package/src/constructors/Badge/index.ts +5 -0
- package/src/constructors/Badge/properties.json +36 -0
- package/src/constructors/Badge/props.ts +43 -0
- package/src/constructors/Badge/style.scss +83 -0
- package/src/constructors/Badge/types.ts +47 -0
- package/src/constructors/Bars/Bars.ts +188 -0
- package/src/constructors/Bars/BarsAction.ts +57 -0
- package/src/constructors/Bars/BarsDesign.tsx +229 -0
- package/src/constructors/Bars/BarsInclude.ts +116 -0
- package/src/constructors/Bars/basicTypes.ts +40 -0
- package/src/constructors/Bars/index.ts +6 -0
- package/src/constructors/Bars/properties.json +6 -0
- package/src/constructors/Bars/props.ts +63 -0
- package/src/constructors/Bars/style.scss +18 -0
- package/src/constructors/Bars/types.ts +58 -0
- package/src/constructors/Button/Button.ts +88 -0
- package/src/constructors/Button/ButtonDesign.tsx +136 -0
- package/src/constructors/Button/ButtonInclude.ts +80 -0
- package/src/constructors/Button/basicTypes.ts +12 -0
- package/src/constructors/Button/index.ts +5 -0
- package/src/constructors/Button/properties.json +84 -0
- package/src/constructors/Button/props.ts +55 -0
- package/src/constructors/Button/style.scss +96 -0
- package/src/constructors/Button/types.ts +56 -0
- package/src/constructors/Cell/Cell.ts +127 -0
- package/src/constructors/Cell/CellDesign.tsx +203 -0
- package/src/constructors/Cell/basicTypes.ts +6 -0
- package/src/constructors/Cell/index.ts +5 -0
- package/src/constructors/Cell/properties.json +52 -0
- package/src/constructors/Cell/props.ts +61 -0
- package/src/constructors/Cell/style.scss +80 -0
- package/src/constructors/Cell/types.ts +68 -0
- package/src/constructors/Chip/Chip.ts +33 -0
- package/src/constructors/Chip/ChipDesign.tsx +26 -0
- package/src/constructors/Chip/basicTypes.ts +0 -0
- package/src/constructors/Chip/index.ts +4 -0
- package/src/constructors/Chip/properties.json +3 -0
- package/src/constructors/Chip/props.ts +44 -0
- package/src/constructors/Chip/style.scss +6 -0
- package/src/constructors/Chip/types.ts +53 -0
- package/src/constructors/Field/Field.ts +147 -0
- package/src/constructors/Field/FieldDesign.tsx +372 -0
- package/src/constructors/Field/FieldIcons.ts +99 -0
- package/src/constructors/Field/FieldInclude.ts +72 -0
- package/src/constructors/Field/FieldSize.ts +93 -0
- package/src/constructors/Field/basicTypes.ts +90 -0
- package/src/constructors/Field/index.ts +5 -0
- package/src/constructors/Field/properties.json +86 -0
- package/src/constructors/Field/props.ts +88 -0
- package/src/constructors/Field/style.scss +556 -0
- package/src/constructors/Field/types.ts +78 -0
- package/src/constructors/FieldCounter/FieldCounter.ts +75 -0
- package/src/constructors/FieldCounter/FieldCounterDesign.tsx +122 -0
- package/src/constructors/FieldCounter/FieldCounterInclude.ts +98 -0
- package/src/constructors/FieldCounter/basicTypes.ts +25 -0
- package/src/constructors/FieldCounter/index.ts +6 -0
- package/src/constructors/FieldCounter/properties.json +3 -0
- package/src/constructors/FieldCounter/props.ts +32 -0
- package/src/constructors/FieldCounter/style.scss +4 -0
- package/src/constructors/FieldCounter/types.ts +42 -0
- package/src/constructors/FieldLabel/FieldLabel.ts +93 -0
- package/src/constructors/FieldLabel/FieldLabelDesign.tsx +156 -0
- package/src/constructors/FieldLabel/FieldLabelInclude.ts +91 -0
- package/src/constructors/FieldLabel/basicTypes.ts +34 -0
- package/src/constructors/FieldLabel/index.ts +6 -0
- package/src/constructors/FieldLabel/properties.json +4 -0
- package/src/constructors/FieldLabel/props.ts +40 -0
- package/src/constructors/FieldLabel/style.scss +10 -0
- package/src/constructors/FieldLabel/types.ts +49 -0
- package/src/constructors/FieldMessage/FieldMessage.ts +79 -0
- package/src/constructors/FieldMessage/FieldMessageDesign.tsx +159 -0
- package/src/constructors/FieldMessage/FieldMessageInclude.ts +105 -0
- package/src/constructors/FieldMessage/FieldMessageMessage.ts +54 -0
- package/src/constructors/FieldMessage/basicTypes.ts +27 -0
- package/src/constructors/FieldMessage/index.ts +6 -0
- package/src/constructors/FieldMessage/properties.json +9 -0
- package/src/constructors/FieldMessage/props.ts +40 -0
- package/src/constructors/FieldMessage/style.scss +13 -0
- package/src/constructors/FieldMessage/types.ts +49 -0
- package/src/constructors/Icon/Icon.ts +105 -0
- package/src/constructors/Icon/IconDesign.tsx +157 -0
- package/src/constructors/Icon/IconInclude.ts +64 -0
- package/src/constructors/Icon/IconLiteInclude.ts +121 -0
- package/src/constructors/Icon/IconTrailingInclude.ts +106 -0
- package/src/constructors/Icon/basicTypes.ts +50 -0
- package/src/constructors/Icon/index.ts +8 -0
- package/src/constructors/Icon/properties.json +25 -0
- package/src/constructors/Icon/props.ts +54 -0
- package/src/constructors/Icon/style.scss +106 -0
- package/src/constructors/Icon/types.ts +46 -0
- package/src/constructors/Image/Image.ts +184 -0
- package/src/constructors/Image/ImageAdaptiveGroup.ts +230 -0
- package/src/constructors/Image/ImageAdaptiveItem.ts +295 -0
- package/src/constructors/Image/ImageBackground.ts +127 -0
- package/src/constructors/Image/ImageCalculation.ts +184 -0
- package/src/constructors/Image/ImageCalculationList.ts +61 -0
- package/src/constructors/Image/ImageCoordinator.ts +104 -0
- package/src/constructors/Image/ImageData.ts +99 -0
- package/src/constructors/Image/ImageDesign.tsx +137 -0
- package/src/constructors/Image/ImageFile.ts +137 -0
- package/src/constructors/Image/ImageInclude.ts +53 -0
- package/src/constructors/Image/ImagePdf.ts +44 -0
- package/src/constructors/Image/ImagePosition.ts +49 -0
- package/src/constructors/Image/ImageType.ts +83 -0
- package/src/constructors/Image/basicTypes.ts +70 -0
- package/src/constructors/Image/index.ts +5 -0
- package/src/constructors/Image/properties.json +17 -0
- package/src/constructors/Image/props.ts +66 -0
- package/src/constructors/Image/style.scss +77 -0
- package/src/constructors/Image/types.ts +49 -0
- package/src/constructors/List/List.ts +267 -0
- package/src/constructors/List/ListControl.ts +194 -0
- package/src/constructors/List/ListDesign.tsx +382 -0
- package/src/constructors/List/ListFocus.ts +196 -0
- package/src/constructors/List/ListGo.ts +283 -0
- package/src/constructors/List/ListSearch.ts +113 -0
- package/src/constructors/List/basicTypes.ts +3 -0
- package/src/constructors/List/index.ts +5 -0
- package/src/constructors/List/properties.json +16 -0
- package/src/constructors/List/props.ts +76 -0
- package/src/constructors/List/style.scss +36 -0
- package/src/constructors/List/types.ts +66 -0
- package/src/constructors/ListGroup/ListGroup.ts +53 -0
- package/src/constructors/ListGroup/ListGroupDesign.tsx +180 -0
- package/src/constructors/ListGroup/ListGroupOpen.ts +56 -0
- package/src/constructors/ListGroup/basicTypes.ts +3 -0
- package/src/constructors/ListGroup/index.ts +5 -0
- package/src/constructors/ListGroup/properties.json +15 -0
- package/src/constructors/ListGroup/props.ts +30 -0
- package/src/constructors/ListGroup/style.scss +18 -0
- package/src/constructors/ListGroup/types.ts +51 -0
- package/src/constructors/ListItem/ListItem.ts +115 -0
- package/src/constructors/ListItem/ListItemDesign.tsx +196 -0
- package/src/constructors/ListItem/basicTypes.ts +3 -0
- package/src/constructors/ListItem/index.ts +5 -0
- package/src/constructors/ListItem/properties.json +52 -0
- package/src/constructors/ListItem/props.ts +78 -0
- package/src/constructors/ListItem/style.scss +152 -0
- package/src/constructors/ListItem/types.ts +78 -0
- package/src/constructors/ListMenu/ListMenu.ts +52 -0
- package/src/constructors/ListMenu/ListMenuDesign.tsx +127 -0
- package/src/constructors/ListMenu/basicTypes.ts +3 -0
- package/src/constructors/ListMenu/index.ts +5 -0
- package/src/constructors/ListMenu/properties.json +19 -0
- package/src/constructors/ListMenu/props.ts +34 -0
- package/src/constructors/ListMenu/style.scss +5 -0
- package/src/constructors/ListMenu/types.ts +54 -0
- package/src/constructors/Mask/Mask.ts +321 -0
- package/src/constructors/Mask/MaskBuffer.ts +89 -0
- package/src/constructors/Mask/MaskCharacter.ts +192 -0
- package/src/constructors/Mask/MaskCharacterLength.ts +40 -0
- package/src/constructors/Mask/MaskData.ts +287 -0
- package/src/constructors/Mask/MaskDate.ts +157 -0
- package/src/constructors/Mask/MaskDesign.tsx +217 -0
- package/src/constructors/Mask/MaskEmit.ts +140 -0
- package/src/constructors/Mask/MaskEvent.ts +347 -0
- package/src/constructors/Mask/MaskFocus.ts +49 -0
- package/src/constructors/Mask/MaskFormat.ts +216 -0
- package/src/constructors/Mask/MaskItem.ts +218 -0
- package/src/constructors/Mask/MaskMatch.ts +73 -0
- package/src/constructors/Mask/MaskPattern.ts +123 -0
- package/src/constructors/Mask/MaskRight.ts +43 -0
- package/src/constructors/Mask/MaskRubber.ts +156 -0
- package/src/constructors/Mask/MaskRubberItem.ts +96 -0
- package/src/constructors/Mask/MaskRubberTransition.ts +50 -0
- package/src/constructors/Mask/MaskSelection.ts +208 -0
- package/src/constructors/Mask/MaskSpecial.ts +179 -0
- package/src/constructors/Mask/MaskType.ts +103 -0
- package/src/constructors/Mask/MaskValidation.ts +102 -0
- package/src/constructors/Mask/MaskValue.ts +225 -0
- package/src/constructors/Mask/MaskValueBasic.ts +87 -0
- package/src/constructors/Mask/MaskView.ts +169 -0
- package/src/constructors/Mask/basicTypes.ts +49 -0
- package/src/constructors/Mask/index.ts +5 -0
- package/src/constructors/Mask/properties.json +29 -0
- package/src/constructors/Mask/props.ts +70 -0
- package/src/constructors/Mask/style.scss +104 -0
- package/src/constructors/Mask/types.ts +71 -0
- package/src/constructors/Menu/Menu.ts +179 -0
- package/src/constructors/Menu/MenuDesign.tsx +244 -0
- package/src/constructors/Menu/MenuInclude.ts +110 -0
- package/src/constructors/Menu/MenuRequest.ts +101 -0
- package/src/constructors/Menu/MenuSearch.ts +49 -0
- package/src/constructors/Menu/MenuValue.ts +73 -0
- package/src/constructors/Menu/MenuWindow.ts +89 -0
- package/src/constructors/Menu/basicTypes.ts +41 -0
- package/src/constructors/Menu/index.ts +6 -0
- package/src/constructors/Menu/properties.json +17 -0
- package/src/constructors/Menu/props.ts +79 -0
- package/src/constructors/Menu/style.scss +17 -0
- package/src/constructors/Menu/types.ts +79 -0
- package/src/constructors/MotionTransform/MotionTransform.ts +87 -0
- package/src/constructors/MotionTransform/MotionTransformClassesInclude.ts +38 -0
- package/src/constructors/MotionTransform/MotionTransformDesign.tsx +242 -0
- package/src/constructors/MotionTransform/MotionTransformElement.ts +220 -0
- package/src/constructors/MotionTransform/MotionTransformEvent.ts +118 -0
- package/src/constructors/MotionTransform/MotionTransformGo.ts +47 -0
- package/src/constructors/MotionTransform/MotionTransformInclude.ts +123 -0
- package/src/constructors/MotionTransform/MotionTransformSize.ts +97 -0
- package/src/constructors/MotionTransform/MotionTransformState.ts +250 -0
- package/src/constructors/MotionTransform/basicTypes.ts +121 -0
- package/src/constructors/MotionTransform/index.ts +7 -0
- package/src/constructors/MotionTransform/properties.json +35 -0
- package/src/constructors/MotionTransform/props.ts +50 -0
- package/src/constructors/MotionTransform/style.scss +180 -0
- package/src/constructors/MotionTransform/types.ts +86 -0
- package/src/constructors/Progress/Progress.ts +184 -0
- package/src/constructors/Progress/ProgressDesign.tsx +175 -0
- package/src/constructors/Progress/ProgressInclude.ts +67 -0
- package/src/constructors/Progress/basicTypes.ts +12 -0
- package/src/constructors/Progress/index.ts +6 -0
- package/src/constructors/Progress/properties.json +47 -0
- package/src/constructors/Progress/props.ts +54 -0
- package/src/constructors/Progress/style.scss +374 -0
- package/src/constructors/Progress/types.ts +43 -0
- package/src/constructors/Ripple/Ripple.ts +46 -0
- package/src/constructors/Ripple/RippleDesign.tsx +112 -0
- package/src/constructors/Ripple/RippleInclude.ts +39 -0
- package/src/constructors/Ripple/RippleItem.ts +62 -0
- package/src/constructors/Ripple/basicTypes.ts +3 -0
- package/src/constructors/Ripple/index.ts +6 -0
- package/src/constructors/Ripple/properties.json +9 -0
- package/src/constructors/Ripple/props.ts +28 -0
- package/src/constructors/Ripple/style.scss +62 -0
- package/src/constructors/Ripple/types.ts +41 -0
- package/src/constructors/Scrollbar/Scrollbar.ts +66 -0
- package/src/constructors/Scrollbar/ScrollbarBorder.ts +243 -0
- package/src/constructors/Scrollbar/ScrollbarDesign.tsx +126 -0
- package/src/constructors/Scrollbar/ScrollbarInclude.ts +80 -0
- package/src/constructors/Scrollbar/basicTypes.ts +42 -0
- package/src/constructors/Scrollbar/index.ts +5 -0
- package/src/constructors/Scrollbar/properties.json +33 -0
- package/src/constructors/Scrollbar/props.ts +37 -0
- package/src/constructors/Scrollbar/style.scss +117 -0
- package/src/constructors/Scrollbar/types.ts +52 -0
- package/src/constructors/Skeleton/Skeleton.ts +86 -0
- package/src/constructors/Skeleton/SkeletonDesign.tsx +117 -0
- package/src/constructors/Skeleton/SkeletonInclude.ts +61 -0
- package/src/constructors/Skeleton/basicTypes.ts +16 -0
- package/src/constructors/Skeleton/const.ts +1 -0
- package/src/constructors/Skeleton/index.ts +6 -0
- package/src/constructors/Skeleton/properties.json +24 -0
- package/src/constructors/Skeleton/props.ts +28 -0
- package/src/constructors/Skeleton/style.scss +112 -0
- package/src/constructors/Skeleton/types.ts +46 -0
- package/src/constructors/Window/Window.ts +212 -0
- package/src/constructors/Window/WindowClasses.ts +180 -0
- package/src/constructors/Window/WindowClassesInclude.ts +39 -0
- package/src/constructors/Window/WindowClient.ts +93 -0
- package/src/constructors/Window/WindowCoordinates.ts +257 -0
- package/src/constructors/Window/WindowDesign.tsx +278 -0
- package/src/constructors/Window/WindowElement.ts +84 -0
- package/src/constructors/Window/WindowEmit.ts +52 -0
- package/src/constructors/Window/WindowEvent.ts +157 -0
- package/src/constructors/Window/WindowFlash.ts +70 -0
- package/src/constructors/Window/WindowHook.ts +110 -0
- package/src/constructors/Window/WindowInclude.ts +134 -0
- package/src/constructors/Window/WindowOpen.ts +292 -0
- package/src/constructors/Window/WindowOrigin.ts +85 -0
- package/src/constructors/Window/WindowPersistent.ts +89 -0
- package/src/constructors/Window/WindowPosition.ts +358 -0
- package/src/constructors/Window/WindowStatic.ts +102 -0
- package/src/constructors/Window/WindowStatus.ts +138 -0
- package/src/constructors/Window/WindowStyles.ts +78 -0
- package/src/constructors/Window/WindowVerification.ts +287 -0
- package/src/constructors/Window/basicTypes.ts +186 -0
- package/src/constructors/Window/index.ts +7 -0
- package/src/constructors/Window/properties.json +236 -0
- package/src/constructors/Window/props.ts +88 -0
- package/src/constructors/Window/style.scss +262 -0
- package/src/constructors/Window/types.ts +124 -0
- package/src/functions/getClassTegAStatic.ts +8 -0
- package/src/library.ts +36 -0
- package/src/types/captionTypes.ts +15 -0
- package/src/types/descriptionTypes.ts +15 -0
- package/src/types/enabledTypes.ts +9 -0
- package/src/types/eventClickTypes.ts +51 -0
- package/src/types/fieldTypes.ts +282 -0
- package/src/types/labelTypes.ts +30 -0
- package/src/types/modelTypes.ts +23 -0
- package/src/types/prefixTypes.ts +15 -0
- package/src/types/suffixTypes.ts +15 -0
- package/src/vite-env.d.ts +1 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
import { MaskRubberItem } from './MaskRubberItem'
|
|
4
|
+
import { MaskCharacterLength } from './MaskCharacterLength'
|
|
5
|
+
import { MaskSpecial } from './MaskSpecial'
|
|
6
|
+
import { MaskItem } from './MaskItem'
|
|
7
|
+
import { MaskSelection } from './MaskSelection'
|
|
8
|
+
|
|
9
|
+
import { MASK_CHAR_DELETE } from './basicTypes'
|
|
10
|
+
import type { MaskProps } from './props'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Class for working with and storing input characters.
|
|
14
|
+
*
|
|
15
|
+
* Класс для работы и хранения вводимых символов.
|
|
16
|
+
*/
|
|
17
|
+
export class MaskCharacter {
|
|
18
|
+
/** Entered characters list/ Список введённых символов */
|
|
19
|
+
readonly item = ref<string[]>([])
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Constructor
|
|
23
|
+
* @param props input data/ входные данные
|
|
24
|
+
* @param rubberItem object for working with rubber elements/ объект для работы с резиновыми элементами
|
|
25
|
+
* @param characterLength object for managing input length/ объект управления длиной ввода
|
|
26
|
+
* @param special object for working with special characters/ объект для работы со специальными символами
|
|
27
|
+
* @param mask object for managing masks/ объект управления маской
|
|
28
|
+
* @param selection object for managing cursor position/ объект для управления положением курсора
|
|
29
|
+
*/
|
|
30
|
+
constructor(
|
|
31
|
+
protected readonly props: MaskProps,
|
|
32
|
+
protected readonly rubberItem: MaskRubberItem,
|
|
33
|
+
protected readonly characterLength: MaskCharacterLength,
|
|
34
|
+
protected readonly special: MaskSpecial,
|
|
35
|
+
protected readonly mask: MaskItem,
|
|
36
|
+
protected readonly selection: MaskSelection
|
|
37
|
+
) {
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Checks if the value is filled.
|
|
42
|
+
*
|
|
43
|
+
* Проверяет, заполнено ли значение.
|
|
44
|
+
*/
|
|
45
|
+
is(): boolean {
|
|
46
|
+
return this.item.value.length > 0
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Checks if the selected character was previously deleted.
|
|
51
|
+
*
|
|
52
|
+
* Проверяет, является ли выделенный символ ранее удалённым.
|
|
53
|
+
*/
|
|
54
|
+
isCharDelete(): boolean {
|
|
55
|
+
const key = this.selection.get()
|
|
56
|
+
|
|
57
|
+
return key in this.item.value
|
|
58
|
+
&& this.item.value[key] === MASK_CHAR_DELETE
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Getting the selected mask character.
|
|
63
|
+
*
|
|
64
|
+
* Получение выбранного символа маски.
|
|
65
|
+
*/
|
|
66
|
+
getFocus(): string {
|
|
67
|
+
return this.mask.get(this.selection.getFocus())
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Getting the mask character by the key number of the nearest special character.
|
|
72
|
+
*
|
|
73
|
+
* Получение символа маски по номеру ключа ближайшего специального символа.
|
|
74
|
+
*/
|
|
75
|
+
getImmediate(): string {
|
|
76
|
+
return this.mask.get(this.selection.getImmediate())
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Getting the next mask character.
|
|
81
|
+
*
|
|
82
|
+
* Получение следующего символа маски.
|
|
83
|
+
*/
|
|
84
|
+
getNext(): string {
|
|
85
|
+
return this.mask.get(this.selection.getNext())
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Adding 1 entered character at its selection location.
|
|
90
|
+
*
|
|
91
|
+
* Добавление 1 введённого символа по месту его выделения.
|
|
92
|
+
* @param char entered character/ введённый символ
|
|
93
|
+
*/
|
|
94
|
+
add(char: string): this {
|
|
95
|
+
this.item.value.splice(this.selection.get(), this.isCharDelete() ? 1 : 0, char)
|
|
96
|
+
this.selection.goNext().resetImmediate()
|
|
97
|
+
this.updateLength()
|
|
98
|
+
|
|
99
|
+
return this
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Deleting 1 entered character at its selection location.
|
|
104
|
+
*
|
|
105
|
+
* Удаление 1 введённого символа по месту его выделения.
|
|
106
|
+
*/
|
|
107
|
+
pop(): this {
|
|
108
|
+
const key = this.selection.get() - 1
|
|
109
|
+
|
|
110
|
+
if (this.isSpecialNextAnother()) {
|
|
111
|
+
this.item.value[key] = MASK_CHAR_DELETE
|
|
112
|
+
} else {
|
|
113
|
+
this.item.value.splice(key, 1)
|
|
114
|
+
this.updateLength()
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
this.selection.goBack().resetImmediate()
|
|
118
|
+
|
|
119
|
+
return this
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Resets the values to the initial values.
|
|
124
|
+
*
|
|
125
|
+
* Сбрасывает значения до начальных.
|
|
126
|
+
*/
|
|
127
|
+
reset(): this {
|
|
128
|
+
this.item.value = []
|
|
129
|
+
this.selection.set(0).resetImmediate()
|
|
130
|
+
this.updateLength()
|
|
131
|
+
|
|
132
|
+
return this
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Shifts by 1 value depending on the direction of selection change.
|
|
137
|
+
*
|
|
138
|
+
* Сдвигает на 1 значение в зависимости от направления изменения выделения.
|
|
139
|
+
* @param status shift status/ статус сдвига
|
|
140
|
+
*/
|
|
141
|
+
shift(status: number = 1): this {
|
|
142
|
+
this.characterLength.set(this.item.value.length + status)
|
|
143
|
+
return this
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Checks if there is another group of special characters ahead.
|
|
148
|
+
*
|
|
149
|
+
* Проверяет, есть ли впереди другая группа специальных символов.
|
|
150
|
+
*/
|
|
151
|
+
protected isSpecialNextAnother(): boolean {
|
|
152
|
+
const selection = this.selection.get() - 1
|
|
153
|
+
const length = this.item.value.length
|
|
154
|
+
|
|
155
|
+
if (
|
|
156
|
+
this.props.groupSave
|
|
157
|
+
&& selection >= 0
|
|
158
|
+
&& selection <= length
|
|
159
|
+
) {
|
|
160
|
+
const info = this.mask.info.value
|
|
161
|
+
const char = info?.[selection]?.char
|
|
162
|
+
|
|
163
|
+
if (char && !this.rubberItem.is(char)) {
|
|
164
|
+
for (let i: number = selection; i < length; i++) {
|
|
165
|
+
if (info?.[i]) {
|
|
166
|
+
const charNext = info[i]?.char
|
|
167
|
+
|
|
168
|
+
if (
|
|
169
|
+
charNext
|
|
170
|
+
&& this.special.isSpecial(charNext)
|
|
171
|
+
&& char !== charNext
|
|
172
|
+
) {
|
|
173
|
+
return true
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return false
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Updates the length of entered characters.
|
|
185
|
+
*
|
|
186
|
+
* Обновляет длину введённых символов.
|
|
187
|
+
*/
|
|
188
|
+
protected updateLength(): this {
|
|
189
|
+
this.characterLength.set(this.item.value.length)
|
|
190
|
+
return this
|
|
191
|
+
}
|
|
192
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Class for storing the length of entered characters.
|
|
5
|
+
*
|
|
6
|
+
* Класс для хранения длины введённых символов.
|
|
7
|
+
*/
|
|
8
|
+
export class MaskCharacterLength {
|
|
9
|
+
/** Current length value/ Текущее значение длины */
|
|
10
|
+
protected length = ref<number>(0)
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Checks if there is at least one entered character.
|
|
14
|
+
*
|
|
15
|
+
* Проверяет, есть ли хотя бы один введённый символ.
|
|
16
|
+
*/
|
|
17
|
+
is(): boolean {
|
|
18
|
+
return this.length.value > 0
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Returns current length.
|
|
23
|
+
*
|
|
24
|
+
* Возвращает текущую длину.
|
|
25
|
+
*/
|
|
26
|
+
get(): number {
|
|
27
|
+
return this.length.value
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Sets new length value.
|
|
32
|
+
*
|
|
33
|
+
* Устанавливает новое значение длины.
|
|
34
|
+
* @param length new length value / новое значение длины
|
|
35
|
+
*/
|
|
36
|
+
set(length: number): this {
|
|
37
|
+
this.length.value = length
|
|
38
|
+
return this
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import type { Ref } from 'vue'
|
|
2
|
+
import { isFilled, toArray } from '@dxtmisha/functional'
|
|
3
|
+
|
|
4
|
+
import { MaskType } from './MaskType'
|
|
5
|
+
import { MaskBuffer } from './MaskBuffer'
|
|
6
|
+
import { MaskFocus } from './MaskFocus'
|
|
7
|
+
import { MaskRubberTransition } from './MaskRubberTransition'
|
|
8
|
+
import { MaskDate } from './MaskDate'
|
|
9
|
+
import { MaskSpecial } from './MaskSpecial'
|
|
10
|
+
import { MaskMatch } from './MaskMatch'
|
|
11
|
+
import { MaskRubber } from './MaskRubber'
|
|
12
|
+
import { MaskItem } from './MaskItem'
|
|
13
|
+
import { MaskSelection } from './MaskSelection'
|
|
14
|
+
import { MaskCharacter } from './MaskCharacter'
|
|
15
|
+
import { MaskValueBasic } from './MaskValueBasic'
|
|
16
|
+
import { MaskValue } from './MaskValue'
|
|
17
|
+
import { MaskEmit } from './MaskEmit'
|
|
18
|
+
|
|
19
|
+
import type { MaskElementInput } from './basicTypes'
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Class for working with input behavior (data entering flow)
|
|
23
|
+
*
|
|
24
|
+
* Класс для работы с поведением при вводе данных
|
|
25
|
+
*/
|
|
26
|
+
export class MaskData {
|
|
27
|
+
/**
|
|
28
|
+
* Constructor
|
|
29
|
+
* @param type object for working with the mask type/ объект для работы с типом маски
|
|
30
|
+
* @param buffer object for managing cached input data/ объект управления кешированными вводимыми данными
|
|
31
|
+
* @param focus object for handling input field focus/ объект для работы с фокусом поля ввода
|
|
32
|
+
* @param rubberTransition object for managing the transition character/ объект для управления символом перехода
|
|
33
|
+
* @param date object for working with date types/ объект для работы с типом даты
|
|
34
|
+
* @param special object for working with special characters/ объект для работы со специальными символами
|
|
35
|
+
* @param match object for managing the input character match logic/ объект для управления совпадением символов ввода
|
|
36
|
+
* @param rubber object for working with rubber types/ объект для работы с резиновыми типами
|
|
37
|
+
* @param mask object for managing masks/ объект управления маской
|
|
38
|
+
* @param selection object for managing caret position/ объект для управления положением курсора
|
|
39
|
+
* @param character object for managing entered characters/ объект для управления введёнными символами
|
|
40
|
+
* @param valueBasic object for working with base values/ объект для работы с базовыми значениями
|
|
41
|
+
* @param value object for working with transformed value/ объект для работы с преобразованным значением
|
|
42
|
+
* @param emit object for handling callback events/ объект для работы с событиями
|
|
43
|
+
* @param element input element ref/ ссылка на элемент ввода
|
|
44
|
+
*/
|
|
45
|
+
constructor(
|
|
46
|
+
protected readonly type: MaskType,
|
|
47
|
+
protected readonly buffer: MaskBuffer,
|
|
48
|
+
protected readonly focus: MaskFocus,
|
|
49
|
+
protected readonly rubberTransition: MaskRubberTransition,
|
|
50
|
+
protected readonly date: MaskDate,
|
|
51
|
+
protected readonly special: MaskSpecial,
|
|
52
|
+
protected readonly match: MaskMatch,
|
|
53
|
+
protected readonly rubber: MaskRubber,
|
|
54
|
+
protected readonly mask: MaskItem,
|
|
55
|
+
protected readonly selection: MaskSelection,
|
|
56
|
+
protected readonly character: MaskCharacter,
|
|
57
|
+
protected readonly valueBasic: MaskValueBasic,
|
|
58
|
+
protected readonly value: MaskValue,
|
|
59
|
+
protected readonly emit: MaskEmit,
|
|
60
|
+
protected readonly element: Ref<MaskElementInput>
|
|
61
|
+
) {
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Adds new characters entered by user
|
|
66
|
+
*
|
|
67
|
+
* Добавляет новые символы, вводимые пользователем
|
|
68
|
+
* @param selection selected key index/ индекс выделенного ключа
|
|
69
|
+
* @param chars list of characters (string or array)/ список вводимых символов
|
|
70
|
+
* @param focus is element focused/ элемент в фокусе ли
|
|
71
|
+
* @returns was value updated/ было ли обновлено значение
|
|
72
|
+
*/
|
|
73
|
+
add(
|
|
74
|
+
selection: number,
|
|
75
|
+
chars: string | string[],
|
|
76
|
+
focus = true
|
|
77
|
+
): boolean {
|
|
78
|
+
let update = false
|
|
79
|
+
|
|
80
|
+
this.selection.setByMask(selection, focus)
|
|
81
|
+
this.rubberTransition.reset()
|
|
82
|
+
|
|
83
|
+
toArray(chars).forEach((char) => {
|
|
84
|
+
const groupName = this.character.getFocus()
|
|
85
|
+
const immediate = this.character.getImmediate()
|
|
86
|
+
|
|
87
|
+
this.selection.setShift(
|
|
88
|
+
this.rubber.update(this.value.info.value, immediate, char)
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
if (this.rubberTransition.is()) {
|
|
92
|
+
this.selection.setByMask(
|
|
93
|
+
this.mask.getByChar(
|
|
94
|
+
this.rubberTransition.item.value,
|
|
95
|
+
this.selection.getImmediate()
|
|
96
|
+
) + 1,
|
|
97
|
+
focus
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (this.match.is(char, groupName)) {
|
|
102
|
+
this.character.shift()
|
|
103
|
+
|
|
104
|
+
if (
|
|
105
|
+
this.character.getFocus() && (
|
|
106
|
+
this.mask.maxLength.value > this.valueBasic.getLength()
|
|
107
|
+
|| this.character.isCharDelete()
|
|
108
|
+
)
|
|
109
|
+
) {
|
|
110
|
+
this.character.add(char)
|
|
111
|
+
update = true
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
this.goSelection()
|
|
117
|
+
return update
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Removes (deletes) selected input characters
|
|
122
|
+
*
|
|
123
|
+
* Удаляет выделенные символы ввода
|
|
124
|
+
* @param start start selection index/ индекс начала выделения
|
|
125
|
+
* @param end end selection index/ индекс конца выделения
|
|
126
|
+
* @param focus is element focused/ элемент в фокусе ли
|
|
127
|
+
*/
|
|
128
|
+
pop(
|
|
129
|
+
start: number,
|
|
130
|
+
end: number = start,
|
|
131
|
+
focus = true
|
|
132
|
+
): this {
|
|
133
|
+
if (
|
|
134
|
+
start >= 0
|
|
135
|
+
&& end <= this.mask.maxLength.value
|
|
136
|
+
) {
|
|
137
|
+
let quantity = this.mask.getQuantity(start, end)
|
|
138
|
+
|
|
139
|
+
if (focus) {
|
|
140
|
+
this.selection.setByMask(end)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
while (quantity--) {
|
|
144
|
+
this.rubberTransition.reset()
|
|
145
|
+
|
|
146
|
+
this.character.pop()
|
|
147
|
+
this.character.shift(0)
|
|
148
|
+
|
|
149
|
+
this.selection.setShift(
|
|
150
|
+
this.rubber.pop(this.character.getFocus())
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
this.goSelection()
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return this
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Resets all values or applies provided value
|
|
162
|
+
*
|
|
163
|
+
* Сбрасывает все значения или применяет переданное
|
|
164
|
+
* @param value new raw value to apply/ новое значение для применения
|
|
165
|
+
*/
|
|
166
|
+
reset(value = ''): this {
|
|
167
|
+
this.character.reset()
|
|
168
|
+
this.rubber.reset()
|
|
169
|
+
|
|
170
|
+
if (isFilled(value)) {
|
|
171
|
+
const chars = this.type.isDate() ? this.date.getValue(value) : value
|
|
172
|
+
this.add(0, this.extra(chars.split('')))
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return this
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Removes redundant characters for paste operation
|
|
180
|
+
*
|
|
181
|
+
* Удаляет лишние символы при вставке
|
|
182
|
+
* @param chars characters to insert/ вставляемые символы
|
|
183
|
+
*/
|
|
184
|
+
extra(chars: string[]): string[] {
|
|
185
|
+
if (this.character.is()) {
|
|
186
|
+
return chars
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const list = this.mask.item.value
|
|
190
|
+
const data: string[] = [...chars]
|
|
191
|
+
|
|
192
|
+
let match = this.match.get(this.mask.info.value?.[0]?.char)
|
|
193
|
+
let key = 0
|
|
194
|
+
|
|
195
|
+
if (match) {
|
|
196
|
+
for (const index in list) {
|
|
197
|
+
const maskChar = list[index]
|
|
198
|
+
if (maskChar) {
|
|
199
|
+
if (this.special.isSpecial(maskChar)) {
|
|
200
|
+
for (let indexChar = key; indexChar < data.length; indexChar++) {
|
|
201
|
+
key++
|
|
202
|
+
|
|
203
|
+
if (data?.[indexChar]?.match(match)) {
|
|
204
|
+
break
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
match = this.match.get(maskChar)
|
|
209
|
+
} else if (maskChar.match(match)) {
|
|
210
|
+
let exit = false
|
|
211
|
+
|
|
212
|
+
for (let indexChar = key; indexChar < data.length; indexChar++) {
|
|
213
|
+
const dataChar = data[indexChar]
|
|
214
|
+
|
|
215
|
+
key++
|
|
216
|
+
|
|
217
|
+
if (dataChar?.match(match)) {
|
|
218
|
+
if (maskChar === dataChar) {
|
|
219
|
+
data.splice(indexChar, 1)
|
|
220
|
+
key--
|
|
221
|
+
} else {
|
|
222
|
+
exit = true
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
break
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (exit) {
|
|
230
|
+
break
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return data
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Restores caret (selection) position
|
|
242
|
+
*
|
|
243
|
+
* Восстанавливает позицию курсора (выделения)
|
|
244
|
+
* @param updateBuffer update from buffer first/ сначала обновить из буфера
|
|
245
|
+
*/
|
|
246
|
+
goSelection(updateBuffer = true): this {
|
|
247
|
+
if (this.focus.is()) {
|
|
248
|
+
requestAnimationFrame(() => {
|
|
249
|
+
if (
|
|
250
|
+
this.element.value && (
|
|
251
|
+
!updateBuffer
|
|
252
|
+
|| !this.goBuffer()
|
|
253
|
+
)
|
|
254
|
+
) {
|
|
255
|
+
const length = this.valueBasic.getLength()
|
|
256
|
+
const shift = this.selection.getShift()
|
|
257
|
+
const newSelection = length < shift ? length : shift
|
|
258
|
+
|
|
259
|
+
this.element.value.selectionEnd = newSelection
|
|
260
|
+
this.element.value.selectionStart = newSelection
|
|
261
|
+
}
|
|
262
|
+
})
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return this
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Processes buffered data if present and emits events
|
|
270
|
+
*
|
|
271
|
+
* Обрабатывает данные из буфера (если есть) и вызывает события
|
|
272
|
+
* @returns was buffer consumed/ был ли использован буфер
|
|
273
|
+
*/
|
|
274
|
+
protected goBuffer(): boolean {
|
|
275
|
+
if (this.buffer.is()) {
|
|
276
|
+
this.add(this.selection.getShift(), this.buffer.get())
|
|
277
|
+
this.buffer.resetChars()
|
|
278
|
+
|
|
279
|
+
return true
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
this.buffer.reset()
|
|
283
|
+
this.emit.go()
|
|
284
|
+
|
|
285
|
+
return false
|
|
286
|
+
}
|
|
287
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { computed } from 'vue'
|
|
2
|
+
import { Datetime } from '@dxtmisha/functional'
|
|
3
|
+
|
|
4
|
+
import { MaskType } from './MaskType'
|
|
5
|
+
|
|
6
|
+
import type { FieldMasks, FieldPatternElement, FieldPatternList } from '../../types/fieldTypes'
|
|
7
|
+
import type { MaskProps } from './props'
|
|
8
|
+
|
|
9
|
+
const PATTERN_FOR_DATE: FieldPatternList = {
|
|
10
|
+
Y: '[0-9]{4}',
|
|
11
|
+
M: {
|
|
12
|
+
type: 'number',
|
|
13
|
+
min: '1',
|
|
14
|
+
max: '12'
|
|
15
|
+
},
|
|
16
|
+
D: (item: FieldMasks): FieldPatternElement => {
|
|
17
|
+
const date = new Datetime(`${item?.Y?.value ?? '2000'}-${item?.M?.value ?? '01'}-01`)
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
type: 'number',
|
|
21
|
+
min: '1',
|
|
22
|
+
max: date.getMaxDay().toString()
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
h: {
|
|
26
|
+
type: 'number',
|
|
27
|
+
min: '0',
|
|
28
|
+
max: '23'
|
|
29
|
+
},
|
|
30
|
+
m: {
|
|
31
|
+
type: 'number',
|
|
32
|
+
min: '0',
|
|
33
|
+
max: '59'
|
|
34
|
+
},
|
|
35
|
+
s: {
|
|
36
|
+
type: 'number',
|
|
37
|
+
min: '0',
|
|
38
|
+
max: '59'
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const VIEW_LIST: Record<string, string> = {
|
|
42
|
+
Y: 'y',
|
|
43
|
+
M: 'm',
|
|
44
|
+
D: 'd',
|
|
45
|
+
h: 'h',
|
|
46
|
+
m: 'm',
|
|
47
|
+
s: 's'
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Class for working with date/time masks (date, datetime, time etc.).
|
|
52
|
+
*
|
|
53
|
+
* Класс для работы с масками даты/времени (date, datetime, time и т.п.).
|
|
54
|
+
*/
|
|
55
|
+
export class MaskDate {
|
|
56
|
+
/**
|
|
57
|
+
* Constructor
|
|
58
|
+
* @param props input data/ входные данные
|
|
59
|
+
* @param type mask type helper/ объект помощник типа маски
|
|
60
|
+
*/
|
|
61
|
+
constructor(
|
|
62
|
+
protected readonly props: MaskProps,
|
|
63
|
+
protected readonly type: MaskType
|
|
64
|
+
) {
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Mask template for current date type / Шаблон маски для текущего типа даты */
|
|
68
|
+
readonly mask = computed<string[]>(() => {
|
|
69
|
+
return this.getDatetime()
|
|
70
|
+
.setHour24(true)
|
|
71
|
+
.locale(undefined, '2-digit')
|
|
72
|
+
.replace('1987', 'YYYY')
|
|
73
|
+
.replace('12', 'MM')
|
|
74
|
+
.replace('18', 'DD')
|
|
75
|
+
.replace('10', 'hh')
|
|
76
|
+
.replace('20', 'mm')
|
|
77
|
+
.replace('30', 'ss')
|
|
78
|
+
.split('')
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Returns base Datetime helper for given value (or default stub).
|
|
83
|
+
*
|
|
84
|
+
* Возвращает базовый помощник Datetime для значения (или дефолтный шаблон).
|
|
85
|
+
* @param date filled date string/ заполненная строка даты
|
|
86
|
+
*/
|
|
87
|
+
getDatetime(date?: string): Datetime {
|
|
88
|
+
return new Datetime(date ?? '1987-12-18T10:20:30', this.type.getByDate(), this.props.language)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Returns localized formatted date/time value.
|
|
93
|
+
*
|
|
94
|
+
* Возвращает локализованное форматированное значение даты/времени.
|
|
95
|
+
* @param date filled date string/ заполненная строка даты
|
|
96
|
+
*/
|
|
97
|
+
getValue(date?: string): string {
|
|
98
|
+
return this.getDatetime(date).locale(undefined, '2-digit')
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Returns standardized (ISO-like) date/time value or empty if invalid.
|
|
103
|
+
*
|
|
104
|
+
* Возвращает стандартизированное (похоже на ISO) значение или пустую строку при невалидности.
|
|
105
|
+
* @param date masks data grouped by parts/ данные масок, сгруппированные по частям
|
|
106
|
+
*/
|
|
107
|
+
getValueStandard(date: FieldMasks): string {
|
|
108
|
+
const value = this.getValueStandardFull(date)
|
|
109
|
+
return value === '' ? '' : this.getDatetime(value).standard(false)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Returns full raw date/time string assembled from groups (or empty if invalid).
|
|
114
|
+
*
|
|
115
|
+
* Возвращает полную «сырую» строку даты/времени, собранную из групп (или пусто если невалидно).
|
|
116
|
+
* @param date masks data grouped by parts/ данные масок, сгруппированные по частям
|
|
117
|
+
*/
|
|
118
|
+
getValueStandardFull(date: FieldMasks): string {
|
|
119
|
+
const value = `${date?.Y?.value || '2000'}`
|
|
120
|
+
+ `-${date?.M?.value || '01'}`
|
|
121
|
+
+ `-${date?.D?.value || '01'}`
|
|
122
|
+
+ `T${date?.h?.value || '00'}`
|
|
123
|
+
+ `:${date?.m?.value || '00'}`
|
|
124
|
+
+ `:${date?.s?.value || '00'}`
|
|
125
|
+
|
|
126
|
+
return isNaN(Date.parse(value)) ? '' : value
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Returns validation patterns object for date/time parts.
|
|
131
|
+
*
|
|
132
|
+
* Возвращает объект паттернов валидации для частей даты/времени.
|
|
133
|
+
*/
|
|
134
|
+
getPattern(): FieldPatternList {
|
|
135
|
+
return PATTERN_FOR_DATE
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** Returns list of date-only group symbols/ Возвращает список символов для даты */
|
|
139
|
+
getSpecialDate(): string[] {
|
|
140
|
+
return ['Y', 'M', 'D']
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** Returns list of full date-time group symbols/ Возвращает список символов для даты и времени */
|
|
144
|
+
getSpecialFull(): string[] {
|
|
145
|
+
return [...this.getSpecialDate(), 'h', 'm', 's']
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Returns display symbol for group.
|
|
150
|
+
*
|
|
151
|
+
* Возвращает отображаемый символ для группы.
|
|
152
|
+
* @param groupName group name/ название группы
|
|
153
|
+
*/
|
|
154
|
+
getView(groupName: string): string | undefined {
|
|
155
|
+
return VIEW_LIST?.[groupName]
|
|
156
|
+
}
|
|
157
|
+
}
|