@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.
Files changed (343) hide show
  1. package/package.json +36 -6
  2. package/src/classes/AriaStaticInclude.ts +269 -0
  3. package/src/classes/DescriptionInclude.ts +19 -2
  4. package/src/classes/EnabledInclude.ts +11 -0
  5. package/src/classes/EventClickInclude.ts +2 -2
  6. package/src/classes/LabelHighlightInclude.ts +35 -0
  7. package/src/classes/LabelInclude.ts +40 -5
  8. package/src/classes/ModelInclude.ts +50 -1
  9. package/src/classes/ModelValueInclude.ts +73 -0
  10. package/src/classes/TabIndexInclude.ts +260 -0
  11. package/src/classes/TextInclude.ts +102 -0
  12. package/src/classes/TouchEventInclude.ts +284 -0
  13. package/src/classes/field/FieldArrowInclude.ts +189 -0
  14. package/src/classes/field/FieldAttributesInclude.ts +87 -28
  15. package/src/classes/field/FieldChangeInclude.ts +1 -1
  16. package/src/classes/field/FieldElementInclude.ts +1 -1
  17. package/src/classes/field/FieldEventInclude.ts +253 -0
  18. package/src/classes/field/FieldInputModeInclude.ts +48 -0
  19. package/src/classes/field/FieldMatchInclude.ts +9 -3
  20. package/src/classes/field/FieldTypeInclude.ts +11 -6
  21. package/src/classes/field/FieldValidationInclude.ts +1 -4
  22. package/src/classes/field/FieldValueInclude.ts +10 -0
  23. package/src/constructors/Accordion/Accordion.ts +68 -0
  24. package/src/constructors/Accordion/AccordionDesign.tsx +192 -0
  25. package/src/constructors/Accordion/basicTypes.ts +0 -0
  26. package/src/constructors/Accordion/index.ts +5 -0
  27. package/src/constructors/Accordion/properties.json +16 -0
  28. package/src/constructors/Accordion/props.ts +55 -0
  29. package/src/constructors/Accordion/style.scss +12 -0
  30. package/src/constructors/Accordion/types.ts +63 -0
  31. package/src/constructors/ActionSheet/ActionSheet.ts +78 -0
  32. package/src/constructors/ActionSheet/ActionSheetDesign.tsx +125 -0
  33. package/src/constructors/ActionSheet/basicTypes.ts +0 -0
  34. package/src/constructors/ActionSheet/index.ts +5 -0
  35. package/src/constructors/ActionSheet/properties.json +14 -0
  36. package/src/constructors/ActionSheet/props.ts +44 -0
  37. package/src/constructors/ActionSheet/style.scss +25 -0
  38. package/src/constructors/ActionSheet/types.ts +54 -0
  39. package/src/constructors/Actions/Actions.ts +60 -0
  40. package/src/constructors/Actions/ActionsDesign.tsx +212 -0
  41. package/src/constructors/Actions/ActionsInclude.ts +109 -0
  42. package/src/constructors/Actions/basicTypes.ts +40 -0
  43. package/src/constructors/Actions/index.ts +6 -0
  44. package/src/constructors/Actions/properties.json +63 -0
  45. package/src/constructors/Actions/props.ts +42 -0
  46. package/src/constructors/Actions/style.scss +11 -0
  47. package/src/constructors/Actions/types.ts +52 -0
  48. package/src/constructors/Anchor/Anchor.ts +113 -0
  49. package/src/constructors/Anchor/AnchorDesign.tsx +242 -0
  50. package/src/constructors/Anchor/AnchorEvent.ts +76 -0
  51. package/src/constructors/Anchor/AnchorHref.ts +54 -0
  52. package/src/constructors/Anchor/AnchorIcon.ts +54 -0
  53. package/src/constructors/Anchor/AnchorTo.ts +46 -0
  54. package/src/constructors/Anchor/basicTypes.ts +9 -0
  55. package/src/constructors/Anchor/index.ts +5 -0
  56. package/src/constructors/Anchor/properties.json +3 -0
  57. package/src/constructors/Anchor/props.ts +54 -0
  58. package/src/constructors/Anchor/style.scss +10 -0
  59. package/src/constructors/Anchor/types.ts +47 -0
  60. package/src/constructors/Arrow/Arrow.ts +134 -0
  61. package/src/constructors/Arrow/ArrowDesign.tsx +226 -0
  62. package/src/constructors/Arrow/ArrowElement.ts +139 -0
  63. package/src/constructors/Arrow/ArrowElementTarget.ts +72 -0
  64. package/src/constructors/Arrow/ArrowEvent.ts +126 -0
  65. package/src/constructors/Arrow/ArrowInclude.ts +85 -0
  66. package/src/constructors/Arrow/ArrowParent.ts +100 -0
  67. package/src/constructors/Arrow/ArrowPosition.ts +231 -0
  68. package/src/constructors/Arrow/basicTypes.ts +50 -0
  69. package/src/constructors/Arrow/index.ts +6 -0
  70. package/src/constructors/Arrow/properties.json +23 -0
  71. package/src/constructors/Arrow/props.ts +31 -0
  72. package/src/constructors/Arrow/style.scss +133 -0
  73. package/src/constructors/Arrow/types.ts +54 -0
  74. package/src/constructors/Badge/BadgeDesign.tsx +4 -1
  75. package/src/constructors/Badge/properties.json +36 -36
  76. package/src/constructors/Badge/props.ts +3 -1
  77. package/src/constructors/Badge/types.ts +3 -3
  78. package/src/constructors/Bars/Bars.ts +10 -4
  79. package/src/constructors/Bars/BarsDesign.tsx +17 -11
  80. package/src/constructors/Bars/BarsInclude.ts +5 -2
  81. package/src/constructors/Bars/properties.json +6 -6
  82. package/src/constructors/Bars/props.ts +3 -1
  83. package/src/constructors/Bars/style.scss +4 -0
  84. package/src/constructors/Bars/types.ts +3 -3
  85. package/src/constructors/Block/Block.ts +105 -0
  86. package/src/constructors/Block/BlockDesign.tsx +219 -0
  87. package/src/constructors/Block/basicTypes.ts +0 -0
  88. package/src/constructors/Block/index.ts +5 -0
  89. package/src/constructors/Block/properties.json +10 -0
  90. package/src/constructors/Block/props.ts +46 -0
  91. package/src/constructors/Block/style.scss +11 -0
  92. package/src/constructors/Block/types.ts +64 -0
  93. package/src/constructors/Button/Button.ts +26 -2
  94. package/src/constructors/Button/ButtonDesign.tsx +11 -6
  95. package/src/constructors/Button/ButtonInclude.ts +8 -5
  96. package/src/constructors/Button/index.ts +1 -0
  97. package/src/constructors/Button/properties.json +84 -84
  98. package/src/constructors/Button/props.ts +5 -1
  99. package/src/constructors/Button/style.scss +1 -1
  100. package/src/constructors/Button/types.ts +2 -2
  101. package/src/constructors/Cell/Cell.ts +23 -6
  102. package/src/constructors/Cell/CellDesign.tsx +53 -22
  103. package/src/constructors/Cell/basicTypes.ts +33 -0
  104. package/src/constructors/Cell/properties.json +52 -52
  105. package/src/constructors/Cell/props.ts +16 -13
  106. package/src/constructors/Cell/style.scss +1 -1
  107. package/src/constructors/Cell/types.ts +3 -3
  108. package/src/constructors/Chip/ChipDesign.tsx +5 -5
  109. package/src/constructors/Chip/ChipInclude.ts +83 -0
  110. package/src/constructors/Chip/basicTypes.ts +12 -0
  111. package/src/constructors/Chip/index.ts +2 -0
  112. package/src/constructors/Chip/properties.json +3 -3
  113. package/src/constructors/Chip/types.ts +5 -5
  114. package/src/constructors/ChipGroup/ChipGroup.ts +74 -0
  115. package/src/constructors/ChipGroup/ChipGroupDesign.tsx +162 -0
  116. package/src/constructors/ChipGroup/basicTypes.ts +6 -0
  117. package/src/constructors/ChipGroup/index.ts +5 -0
  118. package/src/constructors/ChipGroup/properties.json +3 -0
  119. package/src/constructors/ChipGroup/props.ts +50 -0
  120. package/src/constructors/ChipGroup/style.scss +6 -0
  121. package/src/constructors/ChipGroup/types.ts +47 -0
  122. package/src/constructors/Dialog/Dialog.ts +145 -0
  123. package/src/constructors/Dialog/DialogDesign.tsx +135 -0
  124. package/src/constructors/Dialog/basicTypes.ts +0 -0
  125. package/src/constructors/Dialog/index.ts +5 -0
  126. package/src/constructors/Dialog/properties.json +23 -0
  127. package/src/constructors/Dialog/props.ts +76 -0
  128. package/src/constructors/Dialog/style.scss +18 -0
  129. package/src/constructors/Dialog/types.ts +67 -0
  130. package/src/constructors/Field/Field.ts +58 -19
  131. package/src/constructors/Field/FieldDesign.tsx +35 -17
  132. package/src/constructors/Field/FieldInclude.ts +141 -11
  133. package/src/constructors/Field/basicTypes.ts +35 -19
  134. package/src/constructors/Field/properties.json +92 -86
  135. package/src/constructors/Field/props.ts +6 -3
  136. package/src/constructors/Field/style.scss +36 -20
  137. package/src/constructors/Field/types.ts +13 -13
  138. package/src/constructors/FieldCounter/FieldCounterDesign.tsx +1 -0
  139. package/src/constructors/FieldCounter/FieldCounterInclude.ts +3 -1
  140. package/src/constructors/FieldCounter/basicTypes.ts +1 -0
  141. package/src/constructors/FieldCounter/properties.json +3 -3
  142. package/src/constructors/FieldCounter/props.ts +5 -2
  143. package/src/constructors/FieldCounter/types.ts +1 -1
  144. package/src/constructors/FieldLabel/FieldLabelDesign.tsx +6 -2
  145. package/src/constructors/FieldLabel/FieldLabelInclude.ts +13 -4
  146. package/src/constructors/FieldLabel/properties.json +4 -4
  147. package/src/constructors/FieldLabel/props.ts +2 -2
  148. package/src/constructors/FieldLabel/types.ts +2 -2
  149. package/src/constructors/FieldMessage/FieldMessage.ts +19 -0
  150. package/src/constructors/FieldMessage/FieldMessageDesign.tsx +36 -4
  151. package/src/constructors/FieldMessage/FieldMessageInclude.ts +11 -1
  152. package/src/constructors/FieldMessage/basicTypes.ts +15 -1
  153. package/src/constructors/FieldMessage/properties.json +10 -9
  154. package/src/constructors/FieldMessage/props.ts +4 -0
  155. package/src/constructors/FieldMessage/style.scss +16 -1
  156. package/src/constructors/FieldMessage/types.ts +4 -2
  157. package/src/constructors/Icon/Icon.ts +37 -2
  158. package/src/constructors/Icon/IconDesign.tsx +46 -39
  159. package/src/constructors/Icon/properties.json +25 -25
  160. package/src/constructors/Icon/props.ts +22 -16
  161. package/src/constructors/Icon/types.ts +1 -1
  162. package/src/constructors/Image/Image.ts +68 -10
  163. package/src/constructors/Image/ImageBackground.ts +15 -2
  164. package/src/constructors/Image/ImageCoordinator.ts +4 -2
  165. package/src/constructors/Image/ImageData.ts +4 -0
  166. package/src/constructors/Image/ImageDesign.tsx +81 -15
  167. package/src/constructors/Image/ImageFile.ts +2 -13
  168. package/src/constructors/Image/ImageImg.ts +218 -0
  169. package/src/constructors/Image/ImagePdf.ts +2 -2
  170. package/src/constructors/Image/basicTypes.ts +5 -0
  171. package/src/constructors/Image/properties.json +17 -17
  172. package/src/constructors/Image/props.ts +34 -7
  173. package/src/constructors/Image/style.scss +42 -0
  174. package/src/constructors/Image/types.ts +1 -1
  175. package/src/constructors/Input/Input.ts +146 -0
  176. package/src/constructors/Input/InputDesign.tsx +174 -0
  177. package/src/constructors/Input/InputPassword.ts +54 -0
  178. package/src/constructors/Input/basicTypes.ts +3 -0
  179. package/src/constructors/Input/index.ts +5 -0
  180. package/src/constructors/Input/properties.json +2 -0
  181. package/src/constructors/Input/props.ts +53 -0
  182. package/src/constructors/Input/style.scss +5 -0
  183. package/src/constructors/Input/types.ts +48 -0
  184. package/src/constructors/List/List.ts +36 -11
  185. package/src/constructors/List/ListControl.ts +2 -2
  186. package/src/constructors/List/ListDesign.tsx +59 -38
  187. package/src/constructors/List/ListGo.ts +5 -3
  188. package/src/constructors/List/properties.json +16 -16
  189. package/src/constructors/List/props.ts +7 -0
  190. package/src/constructors/List/style.scss +14 -0
  191. package/src/constructors/List/types.ts +9 -9
  192. package/src/constructors/ListGroup/ListGroupDesign.tsx +8 -3
  193. package/src/constructors/ListGroup/basicTypes.ts +7 -0
  194. package/src/constructors/ListGroup/properties.json +15 -15
  195. package/src/constructors/ListGroup/props.ts +4 -4
  196. package/src/constructors/ListGroup/types.ts +2 -1
  197. package/src/constructors/ListItem/ListItem.ts +67 -7
  198. package/src/constructors/ListItem/ListItemDesign.tsx +13 -10
  199. package/src/constructors/ListItem/properties.json +52 -52
  200. package/src/constructors/ListItem/props.ts +24 -15
  201. package/src/constructors/ListItem/types.ts +12 -12
  202. package/src/constructors/ListMenu/ListMenu.ts +2 -1
  203. package/src/constructors/ListMenu/ListMenuDesign.tsx +3 -3
  204. package/src/constructors/ListMenu/properties.json +19 -19
  205. package/src/constructors/ListMenu/types.ts +3 -3
  206. package/src/constructors/Mask/MaskDesign.tsx +33 -28
  207. package/src/constructors/Mask/MaskEvent.ts +41 -2
  208. package/src/constructors/Mask/MaskInclude.ts +147 -0
  209. package/src/constructors/Mask/basicTypes.ts +19 -1
  210. package/src/constructors/Mask/properties.json +30 -29
  211. package/src/constructors/Mask/props.ts +1 -1
  212. package/src/constructors/Mask/style.scss +2 -4
  213. package/src/constructors/Mask/types.ts +4 -4
  214. package/src/constructors/Menu/Menu.ts +17 -5
  215. package/src/constructors/Menu/MenuDesign.tsx +11 -11
  216. package/src/constructors/Menu/MenuGo.ts +72 -0
  217. package/src/constructors/Menu/MenuInclude.ts +20 -10
  218. package/src/constructors/Menu/MenuSearch.ts +20 -1
  219. package/src/constructors/Menu/MenuValue.ts +7 -3
  220. package/src/constructors/Menu/MenuWindow.ts +2 -1
  221. package/src/constructors/Menu/basicTypes.ts +21 -4
  222. package/src/constructors/Menu/properties.json +17 -17
  223. package/src/constructors/Menu/props.ts +15 -3
  224. package/src/constructors/Menu/types.ts +6 -16
  225. package/src/constructors/Modal/Modal.ts +53 -0
  226. package/src/constructors/Modal/ModalAbstract.ts +74 -0
  227. package/src/constructors/Modal/ModalDesign.tsx +63 -0
  228. package/src/constructors/Modal/ModalDesignAbstract.tsx +226 -0
  229. package/src/constructors/Modal/basicTypes.ts +0 -0
  230. package/src/constructors/Modal/index.ts +5 -0
  231. package/src/constructors/Modal/properties.json +17 -0
  232. package/src/constructors/Modal/props.ts +45 -0
  233. package/src/constructors/Modal/style.scss +20 -0
  234. package/src/constructors/Modal/types.ts +62 -0
  235. package/src/constructors/MotionTransform/MotionTransform.ts +65 -8
  236. package/src/constructors/MotionTransform/MotionTransformDesign.tsx +55 -21
  237. package/src/constructors/MotionTransform/MotionTransformElement.ts +7 -2
  238. package/src/constructors/MotionTransform/MotionTransformInclude.ts +2 -1
  239. package/src/constructors/MotionTransform/MotionTransformState.ts +5 -0
  240. package/src/constructors/MotionTransform/basicTypes.ts +18 -2
  241. package/src/constructors/MotionTransform/properties.json +35 -35
  242. package/src/constructors/MotionTransform/props.ts +13 -7
  243. package/src/constructors/MotionTransform/style.scss +24 -2
  244. package/src/constructors/MotionTransform/types.ts +7 -7
  245. package/src/constructors/Progress/Progress.ts +12 -2
  246. package/src/constructors/Progress/ProgressDesign.tsx +75 -53
  247. package/src/constructors/Progress/ProgressInclude.ts +13 -1
  248. package/src/constructors/Progress/properties.json +47 -47
  249. package/src/constructors/Progress/props.ts +5 -1
  250. package/src/constructors/Progress/style.scss +2 -2
  251. package/src/constructors/Progress/types.ts +4 -4
  252. package/src/constructors/Ripple/Ripple.ts +1 -1
  253. package/src/constructors/Ripple/RippleDesign.tsx +7 -4
  254. package/src/constructors/Ripple/RippleItem.ts +1 -1
  255. package/src/constructors/Ripple/style.scss +4 -0
  256. package/src/constructors/Ripple/types.ts +2 -2
  257. package/src/constructors/Scrollbar/Scrollbar.ts +3 -3
  258. package/src/constructors/Scrollbar/ScrollbarDesign.tsx +1 -1
  259. package/src/constructors/Scrollbar/properties.json +33 -33
  260. package/src/constructors/Scrollbar/types.ts +1 -1
  261. package/src/constructors/Section/Section.ts +33 -0
  262. package/src/constructors/Section/SectionDesign.tsx +127 -0
  263. package/src/constructors/Section/basicTypes.ts +0 -0
  264. package/src/constructors/Section/index.ts +5 -0
  265. package/src/constructors/Section/properties.json +2 -0
  266. package/src/constructors/Section/props.ts +29 -0
  267. package/src/constructors/Section/style.scss +5 -0
  268. package/src/constructors/Section/types.ts +47 -0
  269. package/src/constructors/Select/Select.ts +172 -0
  270. package/src/constructors/Select/SelectDesign.tsx +288 -0
  271. package/src/constructors/Select/SelectFilter.ts +43 -0
  272. package/src/constructors/Select/SelectInput.ts +68 -0
  273. package/src/constructors/Select/basicTypes.ts +0 -0
  274. package/src/constructors/Select/index.ts +5 -0
  275. package/src/constructors/Select/properties.json +3 -0
  276. package/src/constructors/Select/props.ts +63 -0
  277. package/src/constructors/Select/style.scss +5 -0
  278. package/src/constructors/Select/types.ts +53 -0
  279. package/src/constructors/SelectValue/SelectValue.ts +95 -0
  280. package/src/constructors/SelectValue/SelectValueDesign.tsx +198 -0
  281. package/src/constructors/SelectValue/SelectValueInclude.ts +92 -0
  282. package/src/constructors/SelectValue/basicTypes.ts +17 -0
  283. package/src/constructors/SelectValue/index.ts +6 -0
  284. package/src/constructors/SelectValue/properties.json +7 -0
  285. package/src/constructors/SelectValue/props.ts +48 -0
  286. package/src/constructors/SelectValue/style.scss +14 -0
  287. package/src/constructors/SelectValue/types.ts +47 -0
  288. package/src/constructors/Skeleton/Skeleton.ts +1 -3
  289. package/src/constructors/Skeleton/SkeletonDesign.tsx +7 -1
  290. package/src/constructors/Skeleton/SkeletonInclude.ts +5 -0
  291. package/src/constructors/Skeleton/properties.json +24 -24
  292. package/src/constructors/Skeleton/types.ts +1 -1
  293. package/src/constructors/TextareaAutosize/TextareaAutosize.ts +41 -0
  294. package/src/constructors/TextareaAutosize/TextareaAutosizeDesign.tsx +147 -0
  295. package/src/constructors/TextareaAutosize/TextareaAutosizeResize.ts +109 -0
  296. package/src/constructors/TextareaAutosize/TextareaAutosizeValue.ts +69 -0
  297. package/src/constructors/TextareaAutosize/basicTypes.ts +0 -0
  298. package/src/constructors/TextareaAutosize/index.ts +5 -0
  299. package/src/constructors/TextareaAutosize/properties.json +6 -0
  300. package/src/constructors/TextareaAutosize/props.ts +34 -0
  301. package/src/constructors/TextareaAutosize/style.scss +31 -0
  302. package/src/constructors/TextareaAutosize/types.ts +50 -0
  303. package/src/constructors/Tooltip/Tooltip.ts +138 -0
  304. package/src/constructors/Tooltip/TooltipClasses.ts +90 -0
  305. package/src/constructors/Tooltip/TooltipDesign.tsx +198 -0
  306. package/src/constructors/Tooltip/TooltipEvent.ts +103 -0
  307. package/src/constructors/Tooltip/TooltipInclude.ts +114 -0
  308. package/src/constructors/Tooltip/TooltipOpen.ts +128 -0
  309. package/src/constructors/Tooltip/TooltipPosition.ts +92 -0
  310. package/src/constructors/Tooltip/TooltipStatus.ts +97 -0
  311. package/src/constructors/Tooltip/TooltipStyle.ts +123 -0
  312. package/src/constructors/Tooltip/basicTypes.ts +39 -0
  313. package/src/constructors/Tooltip/index.ts +6 -0
  314. package/src/constructors/Tooltip/properties.json +14 -0
  315. package/src/constructors/Tooltip/props.ts +49 -0
  316. package/src/constructors/Tooltip/style.scss +43 -0
  317. package/src/constructors/Tooltip/types.ts +58 -0
  318. package/src/constructors/Window/Window.ts +52 -16
  319. package/src/constructors/Window/WindowClasses.ts +33 -0
  320. package/src/constructors/Window/WindowClient.ts +39 -0
  321. package/src/constructors/Window/WindowDesign.tsx +31 -14
  322. package/src/constructors/Window/WindowEsc.ts +114 -0
  323. package/src/constructors/Window/WindowHidden.ts +120 -0
  324. package/src/constructors/Window/WindowInclude.ts +2 -2
  325. package/src/constructors/Window/WindowOpen.ts +10 -1
  326. package/src/constructors/Window/WindowOrigin.ts +5 -1
  327. package/src/constructors/Window/WindowStatic.ts +3 -1
  328. package/src/constructors/Window/WindowVerification.ts +8 -5
  329. package/src/constructors/Window/basicTypes.ts +26 -16
  330. package/src/constructors/Window/properties.json +239 -236
  331. package/src/constructors/Window/props.ts +10 -1
  332. package/src/constructors/Window/style.scss +11 -0
  333. package/src/constructors/Window/types.ts +2 -2
  334. package/src/functions/{getClassTegAStatic.ts → getClassTagAStatic.ts} +1 -1
  335. package/src/library.ts +13 -1
  336. package/src/types/ariaTypes.ts +366 -0
  337. package/src/types/descriptionTypes.ts +8 -0
  338. package/src/types/fieldTypes.ts +120 -16
  339. package/src/types/labelTypes.ts +39 -0
  340. package/src/types/modelTypes.ts +16 -0
  341. package/src/types/roleTypes.ts +88 -0
  342. package/src/types/textTypes.ts +33 -0
  343. 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,6 @@
1
+ export * from './Arrow'
2
+ export * from './ArrowDesign'
3
+ export * from './ArrowInclude'
4
+ export * from './props'
5
+ export * from './types'
6
+ export * from './basicTypes'
@@ -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
+ }