@dxtmisha/constructor 0.23.0 → 0.30.1
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/package.json +36 -6
- package/src/classes/AriaStaticInclude.ts +269 -0
- package/src/classes/DescriptionInclude.ts +19 -2
- package/src/classes/EnabledInclude.ts +11 -0
- package/src/classes/EventClickInclude.ts +2 -2
- package/src/classes/LabelHighlightInclude.ts +35 -0
- package/src/classes/LabelInclude.ts +40 -5
- package/src/classes/ModelInclude.ts +50 -1
- package/src/classes/ModelValueInclude.ts +73 -0
- package/src/classes/TabIndexInclude.ts +260 -0
- package/src/classes/TextInclude.ts +102 -0
- package/src/classes/TouchEventInclude.ts +284 -0
- package/src/classes/field/FieldArrowInclude.ts +189 -0
- package/src/classes/field/FieldAttributesInclude.ts +87 -28
- package/src/classes/field/FieldChangeInclude.ts +1 -1
- package/src/classes/field/FieldElementInclude.ts +1 -1
- package/src/classes/field/FieldEventInclude.ts +253 -0
- package/src/classes/field/FieldInputModeInclude.ts +48 -0
- package/src/classes/field/FieldMatchInclude.ts +9 -3
- package/src/classes/field/FieldTypeInclude.ts +11 -6
- package/src/classes/field/FieldValidationInclude.ts +1 -4
- package/src/classes/field/FieldValueInclude.ts +10 -0
- package/src/constructors/Accordion/Accordion.ts +68 -0
- package/src/constructors/Accordion/AccordionDesign.tsx +192 -0
- package/src/constructors/Accordion/basicTypes.ts +0 -0
- package/src/constructors/Accordion/index.ts +5 -0
- package/src/constructors/Accordion/properties.json +16 -0
- package/src/constructors/Accordion/props.ts +55 -0
- package/src/constructors/Accordion/style.scss +12 -0
- package/src/constructors/Accordion/types.ts +63 -0
- package/src/constructors/ActionSheet/ActionSheet.ts +78 -0
- package/src/constructors/ActionSheet/ActionSheetDesign.tsx +125 -0
- package/src/constructors/ActionSheet/basicTypes.ts +0 -0
- package/src/constructors/ActionSheet/index.ts +5 -0
- package/src/constructors/ActionSheet/properties.json +14 -0
- package/src/constructors/ActionSheet/props.ts +44 -0
- package/src/constructors/ActionSheet/style.scss +25 -0
- package/src/constructors/ActionSheet/types.ts +54 -0
- package/src/constructors/Actions/Actions.ts +60 -0
- package/src/constructors/Actions/ActionsDesign.tsx +212 -0
- package/src/constructors/Actions/ActionsInclude.ts +109 -0
- package/src/constructors/Actions/basicTypes.ts +40 -0
- package/src/constructors/Actions/index.ts +6 -0
- package/src/constructors/Actions/properties.json +63 -0
- package/src/constructors/Actions/props.ts +42 -0
- package/src/constructors/Actions/style.scss +11 -0
- package/src/constructors/Actions/types.ts +52 -0
- package/src/constructors/Anchor/Anchor.ts +113 -0
- package/src/constructors/Anchor/AnchorDesign.tsx +242 -0
- package/src/constructors/Anchor/AnchorEvent.ts +76 -0
- package/src/constructors/Anchor/AnchorHref.ts +54 -0
- package/src/constructors/Anchor/AnchorIcon.ts +54 -0
- package/src/constructors/Anchor/AnchorTo.ts +46 -0
- package/src/constructors/Anchor/basicTypes.ts +9 -0
- package/src/constructors/Anchor/index.ts +5 -0
- package/src/constructors/Anchor/properties.json +3 -0
- package/src/constructors/Anchor/props.ts +54 -0
- package/src/constructors/Anchor/style.scss +10 -0
- package/src/constructors/Anchor/types.ts +47 -0
- package/src/constructors/Arrow/Arrow.ts +134 -0
- package/src/constructors/Arrow/ArrowDesign.tsx +226 -0
- package/src/constructors/Arrow/ArrowElement.ts +139 -0
- package/src/constructors/Arrow/ArrowElementTarget.ts +72 -0
- package/src/constructors/Arrow/ArrowEvent.ts +126 -0
- package/src/constructors/Arrow/ArrowInclude.ts +85 -0
- package/src/constructors/Arrow/ArrowParent.ts +100 -0
- package/src/constructors/Arrow/ArrowPosition.ts +231 -0
- package/src/constructors/Arrow/basicTypes.ts +50 -0
- package/src/constructors/Arrow/index.ts +6 -0
- package/src/constructors/Arrow/properties.json +23 -0
- package/src/constructors/Arrow/props.ts +31 -0
- package/src/constructors/Arrow/style.scss +133 -0
- package/src/constructors/Arrow/types.ts +54 -0
- package/src/constructors/Badge/BadgeDesign.tsx +4 -1
- package/src/constructors/Badge/properties.json +36 -36
- package/src/constructors/Badge/props.ts +3 -1
- package/src/constructors/Badge/types.ts +3 -3
- package/src/constructors/Bars/Bars.ts +10 -4
- package/src/constructors/Bars/BarsDesign.tsx +17 -11
- package/src/constructors/Bars/BarsInclude.ts +5 -2
- package/src/constructors/Bars/properties.json +6 -6
- package/src/constructors/Bars/props.ts +3 -1
- package/src/constructors/Bars/style.scss +4 -0
- package/src/constructors/Bars/types.ts +3 -3
- package/src/constructors/Block/Block.ts +105 -0
- package/src/constructors/Block/BlockDesign.tsx +219 -0
- package/src/constructors/Block/basicTypes.ts +0 -0
- package/src/constructors/Block/index.ts +5 -0
- package/src/constructors/Block/properties.json +10 -0
- package/src/constructors/Block/props.ts +46 -0
- package/src/constructors/Block/style.scss +11 -0
- package/src/constructors/Block/types.ts +64 -0
- package/src/constructors/Button/Button.ts +26 -2
- package/src/constructors/Button/ButtonDesign.tsx +11 -6
- package/src/constructors/Button/ButtonInclude.ts +8 -5
- package/src/constructors/Button/index.ts +1 -0
- package/src/constructors/Button/properties.json +84 -84
- package/src/constructors/Button/props.ts +5 -1
- package/src/constructors/Button/style.scss +1 -1
- package/src/constructors/Button/types.ts +2 -2
- package/src/constructors/Cell/Cell.ts +23 -6
- package/src/constructors/Cell/CellDesign.tsx +53 -22
- package/src/constructors/Cell/basicTypes.ts +33 -0
- package/src/constructors/Cell/properties.json +52 -52
- package/src/constructors/Cell/props.ts +16 -13
- package/src/constructors/Cell/style.scss +1 -1
- package/src/constructors/Cell/types.ts +3 -3
- package/src/constructors/Chip/ChipDesign.tsx +5 -5
- package/src/constructors/Chip/ChipInclude.ts +83 -0
- package/src/constructors/Chip/basicTypes.ts +12 -0
- package/src/constructors/Chip/index.ts +2 -0
- package/src/constructors/Chip/properties.json +3 -3
- package/src/constructors/Chip/types.ts +5 -5
- package/src/constructors/ChipGroup/ChipGroup.ts +74 -0
- package/src/constructors/ChipGroup/ChipGroupDesign.tsx +162 -0
- package/src/constructors/ChipGroup/basicTypes.ts +6 -0
- package/src/constructors/ChipGroup/index.ts +5 -0
- package/src/constructors/ChipGroup/properties.json +3 -0
- package/src/constructors/ChipGroup/props.ts +50 -0
- package/src/constructors/ChipGroup/style.scss +6 -0
- package/src/constructors/ChipGroup/types.ts +47 -0
- package/src/constructors/Dialog/Dialog.ts +145 -0
- package/src/constructors/Dialog/DialogDesign.tsx +135 -0
- package/src/constructors/Dialog/basicTypes.ts +0 -0
- package/src/constructors/Dialog/index.ts +5 -0
- package/src/constructors/Dialog/properties.json +23 -0
- package/src/constructors/Dialog/props.ts +76 -0
- package/src/constructors/Dialog/style.scss +18 -0
- package/src/constructors/Dialog/types.ts +67 -0
- package/src/constructors/Field/Field.ts +58 -19
- package/src/constructors/Field/FieldDesign.tsx +35 -17
- package/src/constructors/Field/FieldInclude.ts +141 -11
- package/src/constructors/Field/basicTypes.ts +35 -19
- package/src/constructors/Field/properties.json +92 -86
- package/src/constructors/Field/props.ts +6 -3
- package/src/constructors/Field/style.scss +36 -20
- package/src/constructors/Field/types.ts +13 -13
- package/src/constructors/FieldCounter/FieldCounterDesign.tsx +1 -0
- package/src/constructors/FieldCounter/FieldCounterInclude.ts +3 -1
- package/src/constructors/FieldCounter/basicTypes.ts +1 -0
- package/src/constructors/FieldCounter/properties.json +3 -3
- package/src/constructors/FieldCounter/props.ts +5 -2
- package/src/constructors/FieldCounter/types.ts +1 -1
- package/src/constructors/FieldLabel/FieldLabelDesign.tsx +6 -2
- package/src/constructors/FieldLabel/FieldLabelInclude.ts +13 -4
- package/src/constructors/FieldLabel/properties.json +4 -4
- package/src/constructors/FieldLabel/props.ts +2 -2
- package/src/constructors/FieldLabel/types.ts +2 -2
- package/src/constructors/FieldMessage/FieldMessage.ts +19 -0
- package/src/constructors/FieldMessage/FieldMessageDesign.tsx +36 -4
- package/src/constructors/FieldMessage/FieldMessageInclude.ts +11 -1
- package/src/constructors/FieldMessage/basicTypes.ts +15 -1
- package/src/constructors/FieldMessage/properties.json +10 -9
- package/src/constructors/FieldMessage/props.ts +4 -0
- package/src/constructors/FieldMessage/style.scss +16 -1
- package/src/constructors/FieldMessage/types.ts +4 -2
- package/src/constructors/Icon/Icon.ts +37 -2
- package/src/constructors/Icon/IconDesign.tsx +46 -39
- package/src/constructors/Icon/properties.json +25 -25
- package/src/constructors/Icon/props.ts +22 -16
- package/src/constructors/Icon/types.ts +1 -1
- package/src/constructors/Image/Image.ts +68 -10
- package/src/constructors/Image/ImageBackground.ts +15 -2
- package/src/constructors/Image/ImageCoordinator.ts +4 -2
- package/src/constructors/Image/ImageData.ts +4 -0
- package/src/constructors/Image/ImageDesign.tsx +81 -15
- package/src/constructors/Image/ImageFile.ts +2 -13
- package/src/constructors/Image/ImageImg.ts +218 -0
- package/src/constructors/Image/ImagePdf.ts +2 -2
- package/src/constructors/Image/basicTypes.ts +5 -0
- package/src/constructors/Image/properties.json +17 -17
- package/src/constructors/Image/props.ts +34 -7
- package/src/constructors/Image/style.scss +42 -0
- package/src/constructors/Image/types.ts +1 -1
- package/src/constructors/Input/Input.ts +146 -0
- package/src/constructors/Input/InputDesign.tsx +174 -0
- package/src/constructors/Input/InputPassword.ts +54 -0
- package/src/constructors/Input/basicTypes.ts +3 -0
- package/src/constructors/Input/index.ts +5 -0
- package/src/constructors/Input/properties.json +2 -0
- package/src/constructors/Input/props.ts +53 -0
- package/src/constructors/Input/style.scss +5 -0
- package/src/constructors/Input/types.ts +48 -0
- package/src/constructors/List/List.ts +36 -11
- package/src/constructors/List/ListControl.ts +2 -2
- package/src/constructors/List/ListDesign.tsx +59 -38
- package/src/constructors/List/ListGo.ts +5 -3
- package/src/constructors/List/properties.json +16 -16
- package/src/constructors/List/props.ts +7 -0
- package/src/constructors/List/style.scss +14 -0
- package/src/constructors/List/types.ts +9 -9
- package/src/constructors/ListGroup/ListGroupDesign.tsx +8 -3
- package/src/constructors/ListGroup/basicTypes.ts +7 -0
- package/src/constructors/ListGroup/properties.json +15 -15
- package/src/constructors/ListGroup/props.ts +4 -4
- package/src/constructors/ListGroup/types.ts +2 -1
- package/src/constructors/ListItem/ListItem.ts +67 -7
- package/src/constructors/ListItem/ListItemDesign.tsx +13 -10
- package/src/constructors/ListItem/properties.json +52 -52
- package/src/constructors/ListItem/props.ts +24 -15
- package/src/constructors/ListItem/types.ts +12 -12
- package/src/constructors/ListMenu/ListMenu.ts +2 -1
- package/src/constructors/ListMenu/ListMenuDesign.tsx +3 -3
- package/src/constructors/ListMenu/properties.json +19 -19
- package/src/constructors/ListMenu/types.ts +3 -3
- package/src/constructors/Mask/MaskDesign.tsx +33 -28
- package/src/constructors/Mask/MaskEvent.ts +41 -2
- package/src/constructors/Mask/MaskInclude.ts +147 -0
- package/src/constructors/Mask/basicTypes.ts +19 -1
- package/src/constructors/Mask/properties.json +30 -29
- package/src/constructors/Mask/props.ts +1 -1
- package/src/constructors/Mask/style.scss +2 -4
- package/src/constructors/Mask/types.ts +4 -4
- package/src/constructors/Menu/Menu.ts +17 -5
- package/src/constructors/Menu/MenuDesign.tsx +11 -11
- package/src/constructors/Menu/MenuGo.ts +72 -0
- package/src/constructors/Menu/MenuInclude.ts +20 -10
- package/src/constructors/Menu/MenuSearch.ts +20 -1
- package/src/constructors/Menu/MenuValue.ts +7 -3
- package/src/constructors/Menu/MenuWindow.ts +2 -1
- package/src/constructors/Menu/basicTypes.ts +21 -4
- package/src/constructors/Menu/properties.json +17 -17
- package/src/constructors/Menu/props.ts +15 -3
- package/src/constructors/Menu/types.ts +6 -16
- package/src/constructors/Modal/Modal.ts +53 -0
- package/src/constructors/Modal/ModalAbstract.ts +74 -0
- package/src/constructors/Modal/ModalDesign.tsx +63 -0
- package/src/constructors/Modal/ModalDesignAbstract.tsx +226 -0
- package/src/constructors/Modal/basicTypes.ts +0 -0
- package/src/constructors/Modal/index.ts +5 -0
- package/src/constructors/Modal/properties.json +17 -0
- package/src/constructors/Modal/props.ts +45 -0
- package/src/constructors/Modal/style.scss +20 -0
- package/src/constructors/Modal/types.ts +62 -0
- package/src/constructors/MotionTransform/MotionTransform.ts +65 -8
- package/src/constructors/MotionTransform/MotionTransformDesign.tsx +55 -21
- package/src/constructors/MotionTransform/MotionTransformElement.ts +7 -2
- package/src/constructors/MotionTransform/MotionTransformInclude.ts +2 -1
- package/src/constructors/MotionTransform/MotionTransformState.ts +5 -0
- package/src/constructors/MotionTransform/basicTypes.ts +18 -2
- package/src/constructors/MotionTransform/properties.json +35 -35
- package/src/constructors/MotionTransform/props.ts +13 -7
- package/src/constructors/MotionTransform/style.scss +24 -2
- package/src/constructors/MotionTransform/types.ts +7 -7
- package/src/constructors/Progress/Progress.ts +12 -2
- package/src/constructors/Progress/ProgressDesign.tsx +75 -53
- package/src/constructors/Progress/ProgressInclude.ts +13 -1
- package/src/constructors/Progress/properties.json +47 -47
- package/src/constructors/Progress/props.ts +5 -1
- package/src/constructors/Progress/style.scss +2 -2
- package/src/constructors/Progress/types.ts +4 -4
- package/src/constructors/Ripple/Ripple.ts +1 -1
- package/src/constructors/Ripple/RippleDesign.tsx +7 -4
- package/src/constructors/Ripple/RippleItem.ts +1 -1
- package/src/constructors/Ripple/style.scss +4 -0
- package/src/constructors/Ripple/types.ts +2 -2
- package/src/constructors/Scrollbar/Scrollbar.ts +3 -3
- package/src/constructors/Scrollbar/ScrollbarDesign.tsx +1 -1
- package/src/constructors/Scrollbar/properties.json +33 -33
- package/src/constructors/Scrollbar/types.ts +1 -1
- package/src/constructors/Section/Section.ts +33 -0
- package/src/constructors/Section/SectionDesign.tsx +127 -0
- package/src/constructors/Section/basicTypes.ts +0 -0
- package/src/constructors/Section/index.ts +5 -0
- package/src/constructors/Section/properties.json +2 -0
- package/src/constructors/Section/props.ts +29 -0
- package/src/constructors/Section/style.scss +5 -0
- package/src/constructors/Section/types.ts +47 -0
- package/src/constructors/Select/Select.ts +172 -0
- package/src/constructors/Select/SelectDesign.tsx +288 -0
- package/src/constructors/Select/SelectFilter.ts +43 -0
- package/src/constructors/Select/SelectInput.ts +68 -0
- package/src/constructors/Select/basicTypes.ts +0 -0
- package/src/constructors/Select/index.ts +5 -0
- package/src/constructors/Select/properties.json +3 -0
- package/src/constructors/Select/props.ts +63 -0
- package/src/constructors/Select/style.scss +5 -0
- package/src/constructors/Select/types.ts +53 -0
- package/src/constructors/SelectValue/SelectValue.ts +95 -0
- package/src/constructors/SelectValue/SelectValueDesign.tsx +198 -0
- package/src/constructors/SelectValue/SelectValueInclude.ts +92 -0
- package/src/constructors/SelectValue/basicTypes.ts +17 -0
- package/src/constructors/SelectValue/index.ts +6 -0
- package/src/constructors/SelectValue/properties.json +7 -0
- package/src/constructors/SelectValue/props.ts +48 -0
- package/src/constructors/SelectValue/style.scss +14 -0
- package/src/constructors/SelectValue/types.ts +47 -0
- package/src/constructors/Skeleton/Skeleton.ts +1 -3
- package/src/constructors/Skeleton/SkeletonDesign.tsx +7 -1
- package/src/constructors/Skeleton/SkeletonInclude.ts +5 -0
- package/src/constructors/Skeleton/properties.json +24 -24
- package/src/constructors/Skeleton/types.ts +1 -1
- package/src/constructors/TextareaAutosize/TextareaAutosize.ts +41 -0
- package/src/constructors/TextareaAutosize/TextareaAutosizeDesign.tsx +147 -0
- package/src/constructors/TextareaAutosize/TextareaAutosizeResize.ts +109 -0
- package/src/constructors/TextareaAutosize/TextareaAutosizeValue.ts +69 -0
- package/src/constructors/TextareaAutosize/basicTypes.ts +0 -0
- package/src/constructors/TextareaAutosize/index.ts +5 -0
- package/src/constructors/TextareaAutosize/properties.json +6 -0
- package/src/constructors/TextareaAutosize/props.ts +34 -0
- package/src/constructors/TextareaAutosize/style.scss +31 -0
- package/src/constructors/TextareaAutosize/types.ts +50 -0
- package/src/constructors/Tooltip/Tooltip.ts +138 -0
- package/src/constructors/Tooltip/TooltipClasses.ts +90 -0
- package/src/constructors/Tooltip/TooltipDesign.tsx +198 -0
- package/src/constructors/Tooltip/TooltipEvent.ts +103 -0
- package/src/constructors/Tooltip/TooltipInclude.ts +114 -0
- package/src/constructors/Tooltip/TooltipOpen.ts +128 -0
- package/src/constructors/Tooltip/TooltipPosition.ts +92 -0
- package/src/constructors/Tooltip/TooltipStatus.ts +97 -0
- package/src/constructors/Tooltip/TooltipStyle.ts +123 -0
- package/src/constructors/Tooltip/basicTypes.ts +39 -0
- package/src/constructors/Tooltip/index.ts +6 -0
- package/src/constructors/Tooltip/properties.json +14 -0
- package/src/constructors/Tooltip/props.ts +49 -0
- package/src/constructors/Tooltip/style.scss +43 -0
- package/src/constructors/Tooltip/types.ts +58 -0
- package/src/constructors/Window/Window.ts +52 -16
- package/src/constructors/Window/WindowClasses.ts +33 -0
- package/src/constructors/Window/WindowClient.ts +39 -0
- package/src/constructors/Window/WindowDesign.tsx +31 -14
- package/src/constructors/Window/WindowEsc.ts +114 -0
- package/src/constructors/Window/WindowHidden.ts +120 -0
- package/src/constructors/Window/WindowInclude.ts +2 -2
- package/src/constructors/Window/WindowOpen.ts +10 -1
- package/src/constructors/Window/WindowOrigin.ts +5 -1
- package/src/constructors/Window/WindowStatic.ts +3 -1
- package/src/constructors/Window/WindowVerification.ts +8 -5
- package/src/constructors/Window/basicTypes.ts +26 -16
- package/src/constructors/Window/properties.json +239 -236
- package/src/constructors/Window/props.ts +10 -1
- package/src/constructors/Window/style.scss +11 -0
- package/src/constructors/Window/types.ts +2 -2
- package/src/functions/{getClassTegAStatic.ts → getClassTagAStatic.ts} +1 -1
- package/src/library.ts +13 -1
- package/src/types/ariaTypes.ts +366 -0
- package/src/types/descriptionTypes.ts +8 -0
- package/src/types/fieldTypes.ts +120 -16
- package/src/types/labelTypes.ts +39 -0
- package/src/types/modelTypes.ts +16 -0
- package/src/types/roleTypes.ts +88 -0
- package/src/types/textTypes.ts +33 -0
- package/src/types/touchEventTypes.ts +43 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
import { isDomRuntime, isFilled, isString } from '@dxtmisha/functional'
|
|
3
|
+
|
|
4
|
+
import type { ArrowProps } from './props'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Class for working with the target element.
|
|
8
|
+
*
|
|
9
|
+
* Класс для работы с целевым элементом.
|
|
10
|
+
*/
|
|
11
|
+
export class ArrowElementTarget {
|
|
12
|
+
readonly element = ref<HTMLElement | undefined>()
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Constructor
|
|
16
|
+
* @param props input properties/ входящие свойства
|
|
17
|
+
*/
|
|
18
|
+
constructor(
|
|
19
|
+
protected readonly props: ArrowProps
|
|
20
|
+
) {
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Checks that the element exists.
|
|
25
|
+
*
|
|
26
|
+
* Проверяет, что элемент существует.
|
|
27
|
+
*/
|
|
28
|
+
is(): boolean {
|
|
29
|
+
return this.element.value !== undefined
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Gets the element's bounding rectangle.
|
|
34
|
+
*
|
|
35
|
+
* Получает ограничивающий прямоугольник элемента.
|
|
36
|
+
*/
|
|
37
|
+
getRect(): DOMRect | undefined {
|
|
38
|
+
return this.element.value?.getBoundingClientRect()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Updates the target element.
|
|
43
|
+
*
|
|
44
|
+
* Обновляет целевой элемент.
|
|
45
|
+
*/
|
|
46
|
+
update(): void {
|
|
47
|
+
this.element.value = this.initElement()
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Initializes the target element.
|
|
52
|
+
*
|
|
53
|
+
* Инициализирует целевой элемент.
|
|
54
|
+
*/
|
|
55
|
+
protected initElement(): HTMLElement | undefined {
|
|
56
|
+
const elementTarget = this.props.elementTarget
|
|
57
|
+
|
|
58
|
+
if (
|
|
59
|
+
this.props.position === 'auto'
|
|
60
|
+
&& isFilled(elementTarget)
|
|
61
|
+
&& isDomRuntime()
|
|
62
|
+
) {
|
|
63
|
+
if (isString(elementTarget)) {
|
|
64
|
+
return document.querySelector<HTMLElement>(elementTarget) ?? undefined
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return elementTarget
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return undefined
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { nextTick, onMounted, onUnmounted, type Ref, type ToRefs, watch } from 'vue'
|
|
2
|
+
import { EventItem, EventRef, isDomRuntime } from '@dxtmisha/functional'
|
|
3
|
+
|
|
4
|
+
import { ArrowElementTarget } from './ArrowElementTarget'
|
|
5
|
+
import { ArrowPosition } from './ArrowPosition'
|
|
6
|
+
import { ArrowParent } from './ArrowParent'
|
|
7
|
+
|
|
8
|
+
import type { ArrowProps } from './props'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Class for managing arrow events.
|
|
12
|
+
*
|
|
13
|
+
* Класс для управления событиями стрелки.
|
|
14
|
+
*/
|
|
15
|
+
export class ArrowEvent {
|
|
16
|
+
protected eventItem?: EventRef<HTMLElement, any>
|
|
17
|
+
protected eventTarget?: EventRef<HTMLElement, any>
|
|
18
|
+
protected eventBody?: EventItem<any, any>
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Constructor
|
|
22
|
+
* @param props input properties / входные свойства
|
|
23
|
+
* @param refs input properties as refs / входные свойства как ссылки
|
|
24
|
+
* @param element arrow element / элемент стрелки
|
|
25
|
+
* @param elementTarget target element / целевой элемент
|
|
26
|
+
* @param parent parent object / объект родителя
|
|
27
|
+
* @param position position object / объект позиции
|
|
28
|
+
*/
|
|
29
|
+
constructor(
|
|
30
|
+
protected readonly props: ArrowProps,
|
|
31
|
+
protected readonly refs: ToRefs<ArrowProps>,
|
|
32
|
+
protected readonly element: Ref<HTMLElement | undefined>,
|
|
33
|
+
protected readonly elementTarget: ArrowElementTarget,
|
|
34
|
+
protected readonly parent: ArrowParent,
|
|
35
|
+
protected readonly position: ArrowPosition
|
|
36
|
+
) {
|
|
37
|
+
if (isDomRuntime()) {
|
|
38
|
+
onMounted(async () => {
|
|
39
|
+
await nextTick()
|
|
40
|
+
|
|
41
|
+
watch(this.elementTarget.element, this.makeEvents)
|
|
42
|
+
watch([...Object.values(this.refs)], this.update, { immediate: true })
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
onUnmounted(() => {
|
|
46
|
+
this.stopEvents()
|
|
47
|
+
})
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Update all reactive elements.
|
|
53
|
+
*
|
|
54
|
+
* Обновить все реактивные элементы.
|
|
55
|
+
*/
|
|
56
|
+
readonly update = (): void => {
|
|
57
|
+
requestAnimationFrame(() => {
|
|
58
|
+
if (this.props.position === 'auto') {
|
|
59
|
+
this.elementTarget.update()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
this.position.update()
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Start events.
|
|
68
|
+
*
|
|
69
|
+
* Запустить события.
|
|
70
|
+
*/
|
|
71
|
+
protected startEvents(): this {
|
|
72
|
+
this.eventItem?.start()
|
|
73
|
+
this.eventTarget?.start()
|
|
74
|
+
this.eventBody?.start()
|
|
75
|
+
|
|
76
|
+
return this
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Stop events.
|
|
81
|
+
*
|
|
82
|
+
* Остановить события.
|
|
83
|
+
*/
|
|
84
|
+
protected stopEvents(): this {
|
|
85
|
+
this.eventItem?.stop()
|
|
86
|
+
this.eventTarget?.stop()
|
|
87
|
+
this.eventBody?.stop()
|
|
88
|
+
|
|
89
|
+
return this
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Initialize events.
|
|
94
|
+
*
|
|
95
|
+
* Инициализировать события.
|
|
96
|
+
*/
|
|
97
|
+
protected initEvents(): this {
|
|
98
|
+
if (!this.eventItem) {
|
|
99
|
+
this.eventItem = new EventRef(this.element, undefined, 'resize', this.update)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (!this.eventTarget) {
|
|
103
|
+
this.eventTarget = new EventRef(this.elementTarget.element, undefined, 'resize', this.update)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!this.eventBody) {
|
|
107
|
+
this.eventBody = new EventItem(window, ['scroll', 'resize'], this.update)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return this
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Create events.
|
|
115
|
+
*
|
|
116
|
+
* Создать события.
|
|
117
|
+
*/
|
|
118
|
+
protected makeEvents = (): void => {
|
|
119
|
+
if (this.elementTarget.is()) {
|
|
120
|
+
this.initEvents()
|
|
121
|
+
.startEvents()
|
|
122
|
+
} else {
|
|
123
|
+
this.stopEvents()
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { computed, type VNode } from 'vue'
|
|
2
|
+
import {
|
|
3
|
+
type ConstrBind,
|
|
4
|
+
DesignComponents,
|
|
5
|
+
getRef,
|
|
6
|
+
type RefOrNormal,
|
|
7
|
+
toBinds
|
|
8
|
+
} from '@dxtmisha/functional'
|
|
9
|
+
|
|
10
|
+
import type { ArrowComponentInclude, ArrowPropsInclude } from './basicTypes'
|
|
11
|
+
import type { ArrowProps } from './props'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* ArrowInclude class provides functionality for conditionally rendering arrow components
|
|
15
|
+
* within other components. It manages the logic for determining when to display arrow
|
|
16
|
+
* and configures the appropriate properties.
|
|
17
|
+
*
|
|
18
|
+
* Класс ArrowInclude предоставляет функциональность для условного рендеринга компонентов
|
|
19
|
+
* стрелки внутри других компонентов. Он управляет логикой определения необходимости
|
|
20
|
+
* отображения стрелки и настраивает соответствующие свойства.
|
|
21
|
+
*/
|
|
22
|
+
export class ArrowInclude<
|
|
23
|
+
Props extends ArrowPropsInclude = ArrowPropsInclude,
|
|
24
|
+
PropsExtra extends ConstrBind<ArrowProps> = ConstrBind<ArrowProps>
|
|
25
|
+
> {
|
|
26
|
+
/**
|
|
27
|
+
* Constructor
|
|
28
|
+
* @param props input parameter/ входной параметр
|
|
29
|
+
* @param className class name/ название класса
|
|
30
|
+
* @param components object for working with components/ объект для работы с компонентами
|
|
31
|
+
* @param elementTarget target element or selector/ целевой элемент или селектор
|
|
32
|
+
* @param extra additional parameter or property name/ дополнительный параметр или имя свойства
|
|
33
|
+
* @param index index identifier/ идентификатор индекса
|
|
34
|
+
*/
|
|
35
|
+
constructor(
|
|
36
|
+
protected readonly props: Readonly<Props>,
|
|
37
|
+
protected readonly className: string,
|
|
38
|
+
protected readonly components?: DesignComponents<ArrowComponentInclude, Props>,
|
|
39
|
+
protected readonly elementTarget?: HTMLElement | string,
|
|
40
|
+
protected readonly extra?: RefOrNormal<PropsExtra>,
|
|
41
|
+
protected readonly index?: string
|
|
42
|
+
) {
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Checks whether arrow should be displayed/
|
|
47
|
+
* Проверяет, нужно ли отображать стрелку
|
|
48
|
+
*/
|
|
49
|
+
readonly is = computed(() => Boolean(
|
|
50
|
+
this.props.arrowShow
|
|
51
|
+
))
|
|
52
|
+
|
|
53
|
+
/** Computed bindings for the arrow/ Вычисляемые привязки для стрелки */
|
|
54
|
+
readonly binds = computed<PropsExtra>(() => {
|
|
55
|
+
return toBinds<PropsExtra>(
|
|
56
|
+
getRef(this.extra),
|
|
57
|
+
this.props.arrowAttrs,
|
|
58
|
+
{
|
|
59
|
+
class: `${this.className}__arrow`,
|
|
60
|
+
elementTarget: this.elementTarget
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Render the Arrow component
|
|
67
|
+
*
|
|
68
|
+
* Рендер компонента стрелки
|
|
69
|
+
*/
|
|
70
|
+
readonly render = (): VNode[] => {
|
|
71
|
+
if (
|
|
72
|
+
this.components
|
|
73
|
+
&& this.is.value
|
|
74
|
+
) {
|
|
75
|
+
return this.components.render(
|
|
76
|
+
'arrow',
|
|
77
|
+
this.binds.value,
|
|
78
|
+
undefined,
|
|
79
|
+
this.index
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return []
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { computed, type Ref, watch } from 'vue'
|
|
2
|
+
import { isDomRuntime, toNumber } from '@dxtmisha/functional'
|
|
3
|
+
import { ArrowElement } from './ArrowElement'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Class for working with the parent element.
|
|
7
|
+
*
|
|
8
|
+
* Класс для работы с родительским элементом.
|
|
9
|
+
*/
|
|
10
|
+
export class ArrowParent {
|
|
11
|
+
/**
|
|
12
|
+
* Constructor
|
|
13
|
+
* @param element input element/ элемент ввода
|
|
14
|
+
* @param className class name/ название класса
|
|
15
|
+
* @param elementItem arrow element/ элемент стрелки
|
|
16
|
+
*/
|
|
17
|
+
constructor(
|
|
18
|
+
protected readonly element: Ref<HTMLElement | undefined>,
|
|
19
|
+
protected readonly className: string,
|
|
20
|
+
protected readonly elementItem: ArrowElement
|
|
21
|
+
) {
|
|
22
|
+
if (isDomRuntime()) {
|
|
23
|
+
watch(element, this.make)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Checks if the parent element has a border/ Проверяет, есть ли у родительского элемента граница */
|
|
28
|
+
readonly isBorder = computed<boolean>(
|
|
29
|
+
() => this.borderWidth.value !== '0px'
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
/** Parent element/ Родительский элемент **/
|
|
33
|
+
readonly elementParent = computed<HTMLElement | undefined>(() => {
|
|
34
|
+
return this.element.value?.parentElement as HTMLElement | undefined
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
/** Background color of the parent element/ Цвет фона родительского элемента **/
|
|
38
|
+
readonly background = computed<string>(
|
|
39
|
+
() => this.getStyles()?.backgroundColor ?? 'transparent'
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
/** Border color of the parent element/ Цвет границы родительского элемента **/
|
|
43
|
+
readonly borderWidth = computed<string>(
|
|
44
|
+
() => this.getStyles()?.borderWidth ?? '0px'
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
/** Border color of the parent element/ Цвет границы родительского элемента **/
|
|
48
|
+
readonly borderColor = computed<string>(
|
|
49
|
+
() => this.getStyles()?.borderColor ?? 'transparent'
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
/** Border radius of the parent element/ Радиус границы родительского элемента **/
|
|
53
|
+
readonly borderRadius = computed<string>(
|
|
54
|
+
() => this.getStyles()?.borderRadius ?? '0px'
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Get border width as number.
|
|
59
|
+
*
|
|
60
|
+
* Получить ширину границы в виде числа.
|
|
61
|
+
*/
|
|
62
|
+
getBorderRadius(): number {
|
|
63
|
+
return toNumber(this.borderRadius.value)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Get computed styles of the parent element.
|
|
68
|
+
*
|
|
69
|
+
* Получить вычисленные стили родительского элемента.
|
|
70
|
+
*/
|
|
71
|
+
protected getStyles() {
|
|
72
|
+
const parent = this.elementParent.value
|
|
73
|
+
|
|
74
|
+
if (parent) {
|
|
75
|
+
return getComputedStyle(parent)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return undefined
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Method for creating styles for the parent element.
|
|
83
|
+
*
|
|
84
|
+
* Метод для создания стилей для родительского элемента.
|
|
85
|
+
*/
|
|
86
|
+
protected readonly make = (): void => {
|
|
87
|
+
requestAnimationFrame(() => {
|
|
88
|
+
if (this.elementParent.value) {
|
|
89
|
+
const elementParent = this.elementParent.value
|
|
90
|
+
|
|
91
|
+
elementParent.classList.add(`${this.className}__parent`)
|
|
92
|
+
elementParent.style.setProperty(`--${this.className}-sys-height`, String(this.elementItem.getHeight()))
|
|
93
|
+
|
|
94
|
+
if (this.isBorder.value) {
|
|
95
|
+
elementParent.dataset.arrow = 'border'
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
import { ArrowElement } from './ArrowElement'
|
|
4
|
+
import { ArrowElementTarget } from './ArrowElementTarget'
|
|
5
|
+
import { ArrowParent } from './ArrowParent'
|
|
6
|
+
|
|
7
|
+
import { type ArrowBorder, ArrowDirection } from './basicTypes'
|
|
8
|
+
import type { ArrowProps } from './props'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Class for calculating the position of the arrow element relative to the target element.
|
|
12
|
+
*
|
|
13
|
+
* Класс для вычисления позиции элемента стрелки относительно целевого элемента.
|
|
14
|
+
*/
|
|
15
|
+
export class ArrowPosition {
|
|
16
|
+
/** Border between item and target elements / Граница между элементами item и target */
|
|
17
|
+
readonly border = ref<ArrowBorder>()
|
|
18
|
+
|
|
19
|
+
/** Direction of the arrow / Направление стрелки */
|
|
20
|
+
readonly direction = ref<ArrowDirection>()
|
|
21
|
+
|
|
22
|
+
/** Shift of the arrow / Смещение стрелки */
|
|
23
|
+
readonly shift = ref<string>()
|
|
24
|
+
|
|
25
|
+
/** Clip path for the arrow / Область обрезки для стрелки */
|
|
26
|
+
readonly clipPath = ref<string>()
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Constructor
|
|
30
|
+
* @param props input properties / входные свойства
|
|
31
|
+
* @param elementItem arrow element / элемент стрелки
|
|
32
|
+
* @param elementTarget target element / целевой элемент
|
|
33
|
+
* @param parent parent element / родительский элемент
|
|
34
|
+
*/
|
|
35
|
+
constructor(
|
|
36
|
+
protected readonly props: ArrowProps,
|
|
37
|
+
protected readonly elementItem: ArrowElement,
|
|
38
|
+
protected readonly elementTarget: ArrowElementTarget,
|
|
39
|
+
protected readonly parent: ArrowParent
|
|
40
|
+
) {
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Updates the position of the arrow.
|
|
45
|
+
*
|
|
46
|
+
* Обновляет позицию стрелки.
|
|
47
|
+
*/
|
|
48
|
+
readonly update = (): void => {
|
|
49
|
+
this.border.value = this.initBorder()
|
|
50
|
+
this.direction.value = this.initDirection()
|
|
51
|
+
this.shift.value = this.initShift()
|
|
52
|
+
|
|
53
|
+
requestAnimationFrame(() => {
|
|
54
|
+
this.clipPath.value = this.initClipPath()
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Checks if the arrow is in the X direction.
|
|
60
|
+
*
|
|
61
|
+
* Проверяет, находится ли стрелка в направлении X.
|
|
62
|
+
*/
|
|
63
|
+
isX() {
|
|
64
|
+
return this.direction.value === ArrowDirection.TOP || this.direction.value === ArrowDirection.BOTTOM
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Gets the minimum value for the arrow position.
|
|
69
|
+
*
|
|
70
|
+
* Получает минимальное значение для позиции стрелки.
|
|
71
|
+
*/
|
|
72
|
+
protected getMinValue(): number {
|
|
73
|
+
return this.parent.getBorderRadius() + (this.elementItem.getWidth() / 2)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Initializes the border between the item and target elements.
|
|
78
|
+
*
|
|
79
|
+
* Инициализирует границу между элементами item и target.
|
|
80
|
+
*/
|
|
81
|
+
protected initBorder(): ArrowBorder | undefined {
|
|
82
|
+
const elementItemRect = this.elementItem.getRect()
|
|
83
|
+
const elementTargetRect = this.elementTarget.getRect()
|
|
84
|
+
|
|
85
|
+
if (
|
|
86
|
+
elementItemRect
|
|
87
|
+
&& elementTargetRect
|
|
88
|
+
) {
|
|
89
|
+
return {
|
|
90
|
+
top: Math.max(elementItemRect.top, elementTargetRect.top),
|
|
91
|
+
bottom: Math.min(elementItemRect.bottom, elementTargetRect.bottom),
|
|
92
|
+
left: Math.max(elementItemRect.left, elementTargetRect.left),
|
|
93
|
+
right: Math.min(elementItemRect.right, elementTargetRect.right)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return undefined
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Initializes the direction of the arrow.
|
|
102
|
+
*
|
|
103
|
+
* Инициализирует направление стрелки.
|
|
104
|
+
*/
|
|
105
|
+
protected initDirection(): ArrowDirection | undefined {
|
|
106
|
+
if (this.props.position !== 'auto') {
|
|
107
|
+
return this.props.position as ArrowDirection
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const elementItemRect = this.elementItem.getRect()
|
|
111
|
+
const elementTargetRect = this.elementTarget.getRect()
|
|
112
|
+
|
|
113
|
+
if (
|
|
114
|
+
this.border.value
|
|
115
|
+
&& elementItemRect
|
|
116
|
+
&& elementTargetRect
|
|
117
|
+
) {
|
|
118
|
+
if (
|
|
119
|
+
elementTargetRect.top <= elementItemRect.top
|
|
120
|
+
&& elementTargetRect.right > elementItemRect.left
|
|
121
|
+
&& elementTargetRect.left < elementItemRect.right
|
|
122
|
+
) {
|
|
123
|
+
return ArrowDirection.TOP
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (
|
|
127
|
+
elementTargetRect.bottom >= elementItemRect.bottom
|
|
128
|
+
&& elementTargetRect.right > elementItemRect.left
|
|
129
|
+
&& elementTargetRect.left < elementItemRect.right
|
|
130
|
+
) {
|
|
131
|
+
return ArrowDirection.BOTTOM
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (
|
|
135
|
+
elementTargetRect.left <= elementItemRect.left
|
|
136
|
+
&& elementTargetRect.bottom > elementItemRect.top
|
|
137
|
+
&& elementTargetRect.top < elementItemRect.bottom
|
|
138
|
+
) {
|
|
139
|
+
return ArrowDirection.LEFT
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (
|
|
143
|
+
elementTargetRect.right >= elementItemRect.right
|
|
144
|
+
&& elementTargetRect.bottom > elementItemRect.top
|
|
145
|
+
&& elementTargetRect.top < elementItemRect.bottom
|
|
146
|
+
) {
|
|
147
|
+
return ArrowDirection.RIGHT
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return undefined
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Initializes the shift of the arrow.
|
|
156
|
+
*
|
|
157
|
+
* Инициализирует смещение стрелки.
|
|
158
|
+
*/
|
|
159
|
+
protected initShift(): string | undefined {
|
|
160
|
+
const border = this.border.value
|
|
161
|
+
const elementItemRect = this.elementItem.getRect()
|
|
162
|
+
|
|
163
|
+
if (border && elementItemRect) {
|
|
164
|
+
const min = this.getMinValue()
|
|
165
|
+
let size: number
|
|
166
|
+
|
|
167
|
+
if (this.isX()) {
|
|
168
|
+
size = Math.min(elementItemRect.width - min, (border.left - elementItemRect.left) + ((border.right - border.left) / 2))
|
|
169
|
+
} else {
|
|
170
|
+
size = Math.min(elementItemRect.height - min, (border.top - elementItemRect.top) + ((border.bottom - border.top) / 2))
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return `${Math.max(min, size)}px`
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return undefined
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Initializes the clip path for the arrow.
|
|
181
|
+
*
|
|
182
|
+
* Инициализирует область обрезки для стрелки.
|
|
183
|
+
*/
|
|
184
|
+
protected initClipPath() {
|
|
185
|
+
const rect = this.elementItem.getRectBorder()
|
|
186
|
+
const rectArrow = this.elementItem.getRectArrowLine()
|
|
187
|
+
|
|
188
|
+
if (rect && rectArrow) {
|
|
189
|
+
const rectangleShow = `M0,0 L0,${rect.height} L${rect.width},${rect.height} L${rect.width},0 Z`
|
|
190
|
+
let startX: number
|
|
191
|
+
let startY: number
|
|
192
|
+
let endX: number
|
|
193
|
+
let endY: number
|
|
194
|
+
|
|
195
|
+
switch (this.direction.value) {
|
|
196
|
+
case ArrowDirection.TOP:
|
|
197
|
+
startX = rectArrow.left - rect.left
|
|
198
|
+
startY = 0
|
|
199
|
+
endX = startX + rectArrow.width
|
|
200
|
+
endY = rectArrow.height
|
|
201
|
+
break
|
|
202
|
+
case ArrowDirection.BOTTOM:
|
|
203
|
+
startX = rectArrow.left - rect.left
|
|
204
|
+
startY = rect.height - rectArrow.height
|
|
205
|
+
endX = startX + rectArrow.width
|
|
206
|
+
endY = rect.height
|
|
207
|
+
break
|
|
208
|
+
case ArrowDirection.LEFT:
|
|
209
|
+
startX = 0
|
|
210
|
+
startY = rectArrow.top - rect.top
|
|
211
|
+
endX = rectArrow.width
|
|
212
|
+
endY = startY + rectArrow.height
|
|
213
|
+
break
|
|
214
|
+
case ArrowDirection.RIGHT:
|
|
215
|
+
startX = rect.width - rectArrow.width
|
|
216
|
+
startY = rectArrow.top - rect.top
|
|
217
|
+
endX = rect.width
|
|
218
|
+
endY = startY + rectArrow.height
|
|
219
|
+
break
|
|
220
|
+
default:
|
|
221
|
+
return undefined
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const rectangleHide = `M${startX},${startY} L${endX},${startY} L${endX},${endY} L${startX},${endY} Z`
|
|
225
|
+
|
|
226
|
+
return `path('${rectangleShow} ${rectangleHide}')`
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return undefined
|
|
230
|
+
}
|
|
231
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ConstrBind } from '@dxtmisha/functional'
|
|
2
|
+
import type { ArrowProps } from './props'
|
|
3
|
+
|
|
4
|
+
/** Arrow direction enum / Направление стрелки перечисление */
|
|
5
|
+
export enum ArrowDirection {
|
|
6
|
+
TOP = 'top',
|
|
7
|
+
BOTTOM = 'bottom',
|
|
8
|
+
LEFT = 'left',
|
|
9
|
+
RIGHT = 'right',
|
|
10
|
+
HIDE = 'hide'
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type ArrowBorder = {
|
|
14
|
+
top: number
|
|
15
|
+
bottom: number
|
|
16
|
+
left: number
|
|
17
|
+
right: number
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type ArrowCenter = {
|
|
21
|
+
x: number
|
|
22
|
+
y: number
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Component map for including the Arrow component/
|
|
27
|
+
* Карта компонентов для подключения компонента Arrow
|
|
28
|
+
*/
|
|
29
|
+
export type ArrowComponentInclude = {
|
|
30
|
+
arrow?: object
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Props used to include and configure the Arrow component/
|
|
35
|
+
* Свойства для подключения и настройки компонента Arrow
|
|
36
|
+
*/
|
|
37
|
+
export interface ArrowPropsInclude<
|
|
38
|
+
Arrow extends ArrowProps = ArrowProps
|
|
39
|
+
> {
|
|
40
|
+
// Status
|
|
41
|
+
/** Show arrow/ Показать стрелку */
|
|
42
|
+
arrowShow?: boolean
|
|
43
|
+
|
|
44
|
+
/** Arrow position/ Позиция стрелки */
|
|
45
|
+
arrowPosition?: ArrowProps['position']
|
|
46
|
+
|
|
47
|
+
// Style
|
|
48
|
+
/** Additional attributes for Arrow component/ Дополнительные атрибуты для компонента Arrow */
|
|
49
|
+
arrowAttrs?: ConstrBind<Arrow>
|
|
50
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"arrowWidth": {
|
|
3
|
+
"_type": "var"
|
|
4
|
+
},
|
|
5
|
+
"arrowHeight": {
|
|
6
|
+
"_type": "var"
|
|
7
|
+
},
|
|
8
|
+
"#mask": {},
|
|
9
|
+
"#arrow": {},
|
|
10
|
+
"#arrowLine": {},
|
|
11
|
+
"#arrowArea": {},
|
|
12
|
+
"#border": {},
|
|
13
|
+
"#borderHidden": {},
|
|
14
|
+
"~position": {
|
|
15
|
+
"~auto": {},
|
|
16
|
+
"~top": {},
|
|
17
|
+
"~bottom": {},
|
|
18
|
+
"~left": {},
|
|
19
|
+
"~right": {},
|
|
20
|
+
"_default": "auto"
|
|
21
|
+
},
|
|
22
|
+
"~inverse": {}
|
|
23
|
+
}
|