@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,90 @@
|
|
|
1
|
+
import { computed, type VNode } from 'vue'
|
|
2
|
+
import { type ConstrClass, getExp, isFilled } from '@dxtmisha/functional'
|
|
3
|
+
|
|
4
|
+
import { LabelInclude } from './LabelInclude'
|
|
5
|
+
import { SkeletonInclude } from '../constructors/Skeleton'
|
|
6
|
+
|
|
7
|
+
import type { LabelHighlightProps, LabelHighlightSlots } from '../types/labelTypes'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The LabelHighlightInclude class extends LabelInclude to add support for highlighting parts of text.
|
|
11
|
+
* Used to display a label with the ability to highlight specific parts.
|
|
12
|
+
*
|
|
13
|
+
* Класс LabelHighlightInclude расширяет LabelInclude и добавляет поддержку выделения частей текста.
|
|
14
|
+
* Используется для отображения метки с возможностью выделения определённых частей.
|
|
15
|
+
*/
|
|
16
|
+
export class LabelHighlightInclude extends LabelInclude {
|
|
17
|
+
/**
|
|
18
|
+
* Constructor for the LabelHighlightInclude class.
|
|
19
|
+
*
|
|
20
|
+
* Конструктор для класса LabelHighlightInclude.
|
|
21
|
+
* @param props input property/ входное свойство
|
|
22
|
+
* @param className class name/ название класса
|
|
23
|
+
* @param classesExtra additional classes/ дополнительные классы
|
|
24
|
+
* @param slots object for working with slots/ объект для работы со слотами
|
|
25
|
+
* @param elementsExtra additional elements/ дополнительные элементы
|
|
26
|
+
* @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
|
|
27
|
+
*/
|
|
28
|
+
constructor(
|
|
29
|
+
protected readonly props: Readonly<LabelHighlightProps>,
|
|
30
|
+
protected readonly className: string,
|
|
31
|
+
protected readonly classesExtra?: ConstrClass,
|
|
32
|
+
protected readonly slots?: LabelHighlightSlots,
|
|
33
|
+
protected readonly elementsExtra?: () => VNode[],
|
|
34
|
+
protected readonly skeleton?: SkeletonInclude
|
|
35
|
+
) {
|
|
36
|
+
super(
|
|
37
|
+
props,
|
|
38
|
+
className,
|
|
39
|
+
classesExtra,
|
|
40
|
+
slots,
|
|
41
|
+
elementsExtra,
|
|
42
|
+
computed(() => this.getLabel()),
|
|
43
|
+
undefined,
|
|
44
|
+
skeleton
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Returns a string with highlighted parts.
|
|
50
|
+
* If highlighting is not required, returns the original string.
|
|
51
|
+
*
|
|
52
|
+
* Возвращает строку с выделенными частями.
|
|
53
|
+
* Если выделение не требуется, возвращает исходную строку.
|
|
54
|
+
*/
|
|
55
|
+
protected getLabel = (): string | undefined => {
|
|
56
|
+
const props = this.props
|
|
57
|
+
|
|
58
|
+
if (
|
|
59
|
+
props.highlight
|
|
60
|
+
&& props.highlight.length >= this.getLengthStart()
|
|
61
|
+
&& props.label
|
|
62
|
+
) {
|
|
63
|
+
const className = `${this.className}__highlight`
|
|
64
|
+
const label = props.label.toString()
|
|
65
|
+
const exp = getExp(props.highlight, 'i')
|
|
66
|
+
|
|
67
|
+
if (label.match(exp)) {
|
|
68
|
+
return label.replace(exp, text => `<span class="${className}">${text}</span>`)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (
|
|
72
|
+
isFilled(props.value)
|
|
73
|
+
&& props.value.toString().match(exp)
|
|
74
|
+
) {
|
|
75
|
+
return `<span class="${className}">${label}</span>`
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return undefined
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Returns the minimum length of the string to start highlighting.
|
|
84
|
+
*
|
|
85
|
+
* Возвращает минимальную длину строки для начала выделения.
|
|
86
|
+
*/
|
|
87
|
+
protected getLengthStart() {
|
|
88
|
+
return this.props.highlightLengthStart ?? 2
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { computed, type Ref, type VNode } from 'vue'
|
|
2
|
+
import { type ConstrClass, isFilled, render } from '@dxtmisha/functional'
|
|
3
|
+
|
|
4
|
+
import { SkeletonInclude } from '../constructors/Skeleton'
|
|
5
|
+
|
|
6
|
+
import type { LabelAlternativeSlots, LabelProps, LabelSlots } from '../types/labelTypes'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Use for adding text
|
|
10
|
+
*
|
|
11
|
+
* Использование для добавления текста
|
|
12
|
+
*/
|
|
13
|
+
export class LabelInclude {
|
|
14
|
+
/**
|
|
15
|
+
* Constructor
|
|
16
|
+
* @param props input property/ входное свойство
|
|
17
|
+
* @param className class name/ название класса
|
|
18
|
+
* @param classesExtra additional classes/ дополнительные классы
|
|
19
|
+
* @param slots object for working with slots/ объект для работы со слотами
|
|
20
|
+
* @param elementsExtra additional elements/ дополнительные элементы
|
|
21
|
+
* @param labelReplacing additional elements/ дополнительные элементы
|
|
22
|
+
* @param alternativeSlots alternative slots/ альтернативные слоты
|
|
23
|
+
* @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
|
|
24
|
+
*/
|
|
25
|
+
constructor(
|
|
26
|
+
protected readonly props: Readonly<LabelProps>,
|
|
27
|
+
protected readonly className: string,
|
|
28
|
+
protected readonly classesExtra?: ConstrClass,
|
|
29
|
+
protected readonly slots?: LabelSlots | LabelAlternativeSlots,
|
|
30
|
+
protected readonly elementsExtra?: () => VNode[],
|
|
31
|
+
protected readonly labelReplacing?: Ref<string | number | undefined>,
|
|
32
|
+
protected readonly alternativeSlots?: boolean,
|
|
33
|
+
protected readonly skeleton?: SkeletonInclude
|
|
34
|
+
) {
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Label presence check/ Проверка наличия метки */
|
|
38
|
+
readonly is = computed<boolean>(() => {
|
|
39
|
+
if (
|
|
40
|
+
this.props.label
|
|
41
|
+
|| this.labelReplacing?.value
|
|
42
|
+
) {
|
|
43
|
+
return true
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (this.slots) {
|
|
47
|
+
if (this.alternativeSlots) {
|
|
48
|
+
return 'label' in this.slots
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return 'default' in this.slots
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return false
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Render the label
|
|
59
|
+
*
|
|
60
|
+
* Рендер метки
|
|
61
|
+
* @param childrenExtra additional children/ дополнительные дочерние элементы
|
|
62
|
+
*/
|
|
63
|
+
render(
|
|
64
|
+
childrenExtra?: any[]
|
|
65
|
+
): VNode[] {
|
|
66
|
+
const elements: any[] = []
|
|
67
|
+
|
|
68
|
+
if (this.is.value) {
|
|
69
|
+
const children: any[] = [
|
|
70
|
+
...this.initLabel(),
|
|
71
|
+
...this.initLabelReplacing(),
|
|
72
|
+
...this.initSlot()
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
if (this.elementsExtra) {
|
|
76
|
+
children.push(...this.elementsExtra())
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (childrenExtra) {
|
|
80
|
+
children.push(...childrenExtra)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (children.length > 0) {
|
|
84
|
+
elements.push(
|
|
85
|
+
render(
|
|
86
|
+
'span',
|
|
87
|
+
{ class: this.getClassName() },
|
|
88
|
+
children,
|
|
89
|
+
'label'
|
|
90
|
+
)
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return elements
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Get the class name for the label
|
|
100
|
+
*
|
|
101
|
+
* Получение имени класса для метки
|
|
102
|
+
*/
|
|
103
|
+
protected getClassName(): ConstrClass {
|
|
104
|
+
const classes: ConstrClass = [`${this.className}__label`]
|
|
105
|
+
|
|
106
|
+
if (this.classesExtra) {
|
|
107
|
+
classes.push(this.classesExtra)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (this.skeleton) {
|
|
111
|
+
classes.push(this.skeleton.classes.value)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return classes
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Adds the label text if it exists
|
|
119
|
+
*
|
|
120
|
+
* Добавляет текст метки, если он есть
|
|
121
|
+
*/
|
|
122
|
+
protected initLabel(): any[] {
|
|
123
|
+
if (
|
|
124
|
+
!this.labelReplacing?.value
|
|
125
|
+
&& isFilled(this.props.label)
|
|
126
|
+
) {
|
|
127
|
+
return [this.props.label]
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return []
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Adds alternative label text if it exists
|
|
135
|
+
*
|
|
136
|
+
* Добавляет альтернативный текст метки, если он есть
|
|
137
|
+
*/
|
|
138
|
+
protected initLabelReplacing(): any[] {
|
|
139
|
+
if (isFilled(this.labelReplacing?.value)) {
|
|
140
|
+
return [
|
|
141
|
+
render(
|
|
142
|
+
'span',
|
|
143
|
+
{ innerHTML: this.labelReplacing.value },
|
|
144
|
+
undefined,
|
|
145
|
+
'highlight'
|
|
146
|
+
)
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return []
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Adds a slot for the label if it exists
|
|
155
|
+
*
|
|
156
|
+
* Добавляет слот для метки, если он есть
|
|
157
|
+
*/
|
|
158
|
+
protected initSlot(): any[] {
|
|
159
|
+
if (this.slots) {
|
|
160
|
+
if (this.alternativeSlots) {
|
|
161
|
+
if ('label' in this.slots) {
|
|
162
|
+
return [this.slots.label?.({})]
|
|
163
|
+
}
|
|
164
|
+
} else if ('default' in this.slots) {
|
|
165
|
+
return [this.slots.default?.({})]
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return []
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { computed, type VNode } from 'vue'
|
|
2
|
+
import { type ConstrClass, GeoRef, isNumber, toNumberByMax } from '@dxtmisha/functional'
|
|
3
|
+
|
|
4
|
+
import { LabelInclude } from './LabelInclude'
|
|
5
|
+
import { SkeletonInclude } from '../constructors/Skeleton'
|
|
6
|
+
|
|
7
|
+
import type { LabelNumberProps, LabelNumberSlots } from '../types/labelTypes'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The LabelNumberInclude class extends LabelInclude to handle numeric labels.
|
|
11
|
+
* Allows converting and displaying numeric values with respect to maximum constraints.
|
|
12
|
+
*
|
|
13
|
+
* Класс LabelNumberInclude расширяет LabelInclude для работы с числовыми метками.
|
|
14
|
+
* Позволяет преобразовывать и отображать числовые значения с учетом максимальных ограничений.
|
|
15
|
+
*/
|
|
16
|
+
export class LabelNumberInclude extends LabelInclude {
|
|
17
|
+
/**
|
|
18
|
+
* Constructor for working with text that has maximum values.
|
|
19
|
+
*
|
|
20
|
+
* Конструктор для работы с текстом, у которого есть максимальные значения.
|
|
21
|
+
* @param props input property/ входное свойство
|
|
22
|
+
* @param className class name/ название класса
|
|
23
|
+
* @param classesExtra additional classes/ дополнительные классы
|
|
24
|
+
* @param slots object for working with slots/ объект для работы со слотами
|
|
25
|
+
* @param elementsExtra additional elements/ дополнительные элементы
|
|
26
|
+
* @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
|
|
27
|
+
*/
|
|
28
|
+
constructor(
|
|
29
|
+
protected readonly props: Readonly<LabelNumberProps>,
|
|
30
|
+
protected readonly className: string,
|
|
31
|
+
protected readonly classesExtra?: ConstrClass,
|
|
32
|
+
protected readonly slots?: LabelNumberSlots,
|
|
33
|
+
protected readonly elementsExtra?: () => VNode[],
|
|
34
|
+
protected readonly skeleton?: SkeletonInclude
|
|
35
|
+
) {
|
|
36
|
+
super(
|
|
37
|
+
props,
|
|
38
|
+
className,
|
|
39
|
+
classesExtra,
|
|
40
|
+
slots,
|
|
41
|
+
elementsExtra,
|
|
42
|
+
computed(() => this.getNumber()),
|
|
43
|
+
undefined,
|
|
44
|
+
skeleton
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Returns text with conversion to maximum values.
|
|
50
|
+
*
|
|
51
|
+
* Возвращает текст с преобразованием в максимальные значения.
|
|
52
|
+
*/
|
|
53
|
+
protected getNumber(): string | undefined {
|
|
54
|
+
const props = this.props
|
|
55
|
+
|
|
56
|
+
if (
|
|
57
|
+
props.label
|
|
58
|
+
&& isNumber(props.label)
|
|
59
|
+
) {
|
|
60
|
+
return toNumberByMax(
|
|
61
|
+
props.label,
|
|
62
|
+
props.labelMax,
|
|
63
|
+
props.formatting,
|
|
64
|
+
GeoRef.getLanguage().value
|
|
65
|
+
).toString()
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return undefined
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { watch } from 'vue'
|
|
2
|
+
import {
|
|
3
|
+
isFunction,
|
|
4
|
+
type RefType,
|
|
5
|
+
toCamelCase,
|
|
6
|
+
toCamelCaseFirst
|
|
7
|
+
} from '@dxtmisha/functional'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Class for managing model synchronization and event emission.
|
|
11
|
+
* Handles two-way data binding with reactive values and emits update events.
|
|
12
|
+
*
|
|
13
|
+
* Класс для управления синхронизацией модели и испусканием событий.
|
|
14
|
+
* Обрабатывает двустороннюю привязку данных с реактивными значениями и испускает события обновления.
|
|
15
|
+
*/
|
|
16
|
+
export class ModelInclude<Value = string> {
|
|
17
|
+
/**
|
|
18
|
+
* Constructor
|
|
19
|
+
* @param index The index key for the model property/ Ключ индекса для свойства модели
|
|
20
|
+
* @param emits Function to emit events/ Функция для испускания событий
|
|
21
|
+
* @param syncValue Reactive value to synchronize/ Реактивное значение для синхронизации
|
|
22
|
+
*/
|
|
23
|
+
constructor(
|
|
24
|
+
protected readonly index: string,
|
|
25
|
+
protected readonly emits?: any,
|
|
26
|
+
protected readonly syncValue?: RefType<Value>
|
|
27
|
+
) {
|
|
28
|
+
if (syncValue) {
|
|
29
|
+
watch(syncValue, (newValue: Value) => {
|
|
30
|
+
this.emit(newValue)
|
|
31
|
+
}, { immediate: true })
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Emits an event to update the model value.
|
|
37
|
+
* Triggers the corresponding update event with the new value.
|
|
38
|
+
*
|
|
39
|
+
* Испускает событие для обновления значения модели.
|
|
40
|
+
* Запускает соответствующее событие обновления с новым значением.
|
|
41
|
+
* @param value The new value to set/ Новое значение для установки
|
|
42
|
+
*/
|
|
43
|
+
emit(value: Value): void {
|
|
44
|
+
if (isFunction(this.emits)) {
|
|
45
|
+
this.emits(`update:${toCamelCase(this.index)}`, value)
|
|
46
|
+
this.emits(`update:model${toCamelCaseFirst(this.index)}`, value)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { computed, type VNode } from 'vue'
|
|
2
|
+
import { isFilled, render } from '@dxtmisha/functional'
|
|
3
|
+
|
|
4
|
+
import { SkeletonInclude } from '../constructors/Skeleton'
|
|
5
|
+
|
|
6
|
+
import type { PrefixProps, PrefixSlots } from '../types/prefixTypes'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Class for working with prefix.
|
|
10
|
+
*
|
|
11
|
+
* Класс для работы с prefix.
|
|
12
|
+
*/
|
|
13
|
+
export class PrefixInclude {
|
|
14
|
+
/**
|
|
15
|
+
* Constructor
|
|
16
|
+
* @param props input property/ входное свойство
|
|
17
|
+
* @param className class name/ название класса
|
|
18
|
+
* @param slots object for working with slots/ объект для работы со слотами
|
|
19
|
+
* @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
|
|
20
|
+
*/
|
|
21
|
+
constructor(
|
|
22
|
+
protected readonly props: Readonly<PrefixProps>,
|
|
23
|
+
protected readonly className: string,
|
|
24
|
+
protected readonly slots?: PrefixSlots,
|
|
25
|
+
protected readonly skeleton?: SkeletonInclude
|
|
26
|
+
) {
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Returns true if prefix is filled
|
|
31
|
+
*
|
|
32
|
+
* Возвращает true, если prefix заполнен
|
|
33
|
+
*/
|
|
34
|
+
readonly is = computed(() => Boolean(this.props.prefix || this.slots?.prefix))
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Renders prefix element with content from props or slots.
|
|
38
|
+
*
|
|
39
|
+
* Отображает элемент prefix с содержимым из props или slots.
|
|
40
|
+
*/
|
|
41
|
+
render(): VNode[] {
|
|
42
|
+
const children: any[] = []
|
|
43
|
+
|
|
44
|
+
if (isFilled(this.props.prefix)) {
|
|
45
|
+
children.push(this.props.prefix)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (this.slots?.prefix) {
|
|
49
|
+
children.push(this.slots.prefix?.({}))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (children.length > 0) {
|
|
53
|
+
return [
|
|
54
|
+
render(
|
|
55
|
+
'div',
|
|
56
|
+
{
|
|
57
|
+
'class': {
|
|
58
|
+
[`${this.className}__prefix`]: true,
|
|
59
|
+
...this.skeleton?.classes.value
|
|
60
|
+
},
|
|
61
|
+
'data-event-type': 'prefix'
|
|
62
|
+
},
|
|
63
|
+
children,
|
|
64
|
+
'prefix'
|
|
65
|
+
)
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return []
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { computed, type VNode } from 'vue'
|
|
2
|
+
import { isFilled, render } from '@dxtmisha/functional'
|
|
3
|
+
|
|
4
|
+
import { SkeletonInclude } from '../constructors/Skeleton'
|
|
5
|
+
|
|
6
|
+
import type { SuffixProps, SuffixSlots } from '../types/suffixTypes'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Class for working with suffix.
|
|
10
|
+
*
|
|
11
|
+
* Класс для работы с suffix.
|
|
12
|
+
*/
|
|
13
|
+
export class SuffixInclude {
|
|
14
|
+
/**
|
|
15
|
+
* Constructor
|
|
16
|
+
* @param props input property/ входное свойство
|
|
17
|
+
* @param className class name/ название класса
|
|
18
|
+
* @param slots object for working with slots/ объект для работы со слотами
|
|
19
|
+
* @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
|
|
20
|
+
*/
|
|
21
|
+
constructor(
|
|
22
|
+
protected readonly props: Readonly<SuffixProps>,
|
|
23
|
+
protected readonly className: string,
|
|
24
|
+
protected readonly slots?: SuffixSlots,
|
|
25
|
+
protected readonly skeleton?: SkeletonInclude
|
|
26
|
+
) {
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Returns true if suffix is filled
|
|
31
|
+
*
|
|
32
|
+
* Возвращает true, если suffix заполнен
|
|
33
|
+
*/
|
|
34
|
+
readonly is = computed(() => Boolean(this.props.suffix || this.slots?.suffix))
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Renders suffix element with content from props or slots.
|
|
38
|
+
*
|
|
39
|
+
* Отображает элемент suffix с содержимым из props или slots.
|
|
40
|
+
*/
|
|
41
|
+
render(): VNode[] {
|
|
42
|
+
const children: any[] = []
|
|
43
|
+
|
|
44
|
+
if (isFilled(this.props.suffix)) {
|
|
45
|
+
children.push(this.props.suffix)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (this.slots?.suffix) {
|
|
49
|
+
children.push(this.slots.suffix?.({}))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (children.length > 0) {
|
|
53
|
+
return [
|
|
54
|
+
render(
|
|
55
|
+
'div',
|
|
56
|
+
{
|
|
57
|
+
'class': {
|
|
58
|
+
[`${this.className}__suffix`]: true,
|
|
59
|
+
...this.skeleton?.classes.value
|
|
60
|
+
},
|
|
61
|
+
'data-event-type': 'suffix'
|
|
62
|
+
},
|
|
63
|
+
children,
|
|
64
|
+
'suffix'
|
|
65
|
+
)
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return []
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { computed } from 'vue'
|
|
2
|
+
|
|
3
|
+
import { FieldTypeInclude } from './FieldTypeInclude'
|
|
4
|
+
import { FieldPatternInclude } from './FieldPatternInclude'
|
|
5
|
+
|
|
6
|
+
import type { FieldAllProps } from '../../types/fieldTypes'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Class for working with input elements.
|
|
10
|
+
*
|
|
11
|
+
* Класс для работы с элементами ввода.
|
|
12
|
+
*/
|
|
13
|
+
export class FieldAttributesInclude {
|
|
14
|
+
/**
|
|
15
|
+
* Constructor
|
|
16
|
+
* @param props input data/ входные данные
|
|
17
|
+
* @param type object for working with input type/ объект для работы с типом ввода
|
|
18
|
+
* @param pattern object for working with checks by regular expressions/
|
|
19
|
+
* объект для работы с проверкой по регулярным выражениям
|
|
20
|
+
*/
|
|
21
|
+
constructor(
|
|
22
|
+
protected readonly props: FieldAllProps,
|
|
23
|
+
protected readonly type?: FieldTypeInclude,
|
|
24
|
+
protected readonly pattern?: FieldPatternInclude
|
|
25
|
+
) {
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Returns data for verification/ Возвращает данные для проверки */
|
|
29
|
+
readonly list = computed<Record<string, any>>(() => {
|
|
30
|
+
const data: Record<string, any> = {}
|
|
31
|
+
|
|
32
|
+
this.getAttributes().forEach((index) => {
|
|
33
|
+
if (index in this.props) {
|
|
34
|
+
switch (index) {
|
|
35
|
+
case 'type':
|
|
36
|
+
if (this.type) {
|
|
37
|
+
data[index] = this.type.item.value
|
|
38
|
+
} else {
|
|
39
|
+
data[index] = this.props.type
|
|
40
|
+
}
|
|
41
|
+
break
|
|
42
|
+
case 'pattern':
|
|
43
|
+
if (this.pattern) {
|
|
44
|
+
data.pattern = this.pattern.item.value
|
|
45
|
+
}
|
|
46
|
+
break
|
|
47
|
+
default:
|
|
48
|
+
data[index] = this.props[index]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
...data,
|
|
55
|
+
...this.props.inputAttrs
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
/** Returns data for verification/ Возвращает данные для проверки */
|
|
60
|
+
readonly listForCheck = computed<Record<string, any>>(() => {
|
|
61
|
+
const data = this.list.value
|
|
62
|
+
|
|
63
|
+
if (
|
|
64
|
+
this.props.min
|
|
65
|
+
|| this.props.max
|
|
66
|
+
|| this.props.step
|
|
67
|
+
) {
|
|
68
|
+
return {
|
|
69
|
+
...data,
|
|
70
|
+
type: 'number'
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return data
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Returns the list of attributes to be set on the input element.
|
|
79
|
+
*
|
|
80
|
+
* Возвращает список атрибутов, которые нужно установить на элемент ввода.
|
|
81
|
+
*/
|
|
82
|
+
protected getAttributes(): (keyof typeof this.props)[] {
|
|
83
|
+
return [
|
|
84
|
+
'type',
|
|
85
|
+
'name',
|
|
86
|
+
'required',
|
|
87
|
+
'multiple',
|
|
88
|
+
|
|
89
|
+
'step',
|
|
90
|
+
'min',
|
|
91
|
+
'max',
|
|
92
|
+
|
|
93
|
+
'minlength',
|
|
94
|
+
'maxlength',
|
|
95
|
+
|
|
96
|
+
'accept',
|
|
97
|
+
'pattern'
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
import type { FieldAllProps } from '../../types/fieldTypes'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The class tracks field value change state
|
|
6
|
+
*
|
|
7
|
+
* Класс возвращает состояние изменения значения поля
|
|
8
|
+
*/
|
|
9
|
+
export class FieldChangeInclude {
|
|
10
|
+
/** Change state flag/ Флаг состояния изменения */
|
|
11
|
+
readonly item = ref<boolean>(false)
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Constructor
|
|
15
|
+
* @param props input data/ входные данные
|
|
16
|
+
*/
|
|
17
|
+
constructor(props: FieldAllProps) {
|
|
18
|
+
if (props.value || props.modelValue) {
|
|
19
|
+
this.item.value = true
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Returns whether value was changed
|
|
25
|
+
*
|
|
26
|
+
* Возвращает, было ли значение изменено
|
|
27
|
+
*/
|
|
28
|
+
is(): boolean {
|
|
29
|
+
return Boolean(this.item.value)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Sets change state
|
|
34
|
+
*
|
|
35
|
+
* Устанавливает состояние изменения
|
|
36
|
+
* @param change new state value/ новое значение состояния
|
|
37
|
+
*/
|
|
38
|
+
set(change: boolean) {
|
|
39
|
+
this.item.value = change
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Force mark as changed
|
|
44
|
+
*
|
|
45
|
+
* Принудительно помечает как изменённое
|
|
46
|
+
*/
|
|
47
|
+
toChange() {
|
|
48
|
+
if (!this.item.value) {
|
|
49
|
+
this.set(true)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|