@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.
Files changed (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/package.json +124 -0
  4. package/src/classes/CaptionInclude.ts +71 -0
  5. package/src/classes/DescriptionInclude.ts +70 -0
  6. package/src/classes/EnabledInclude.ts +56 -0
  7. package/src/classes/EventClickInclude.ts +138 -0
  8. package/src/classes/LabelHighlightInclude.ts +90 -0
  9. package/src/classes/LabelInclude.ts +171 -0
  10. package/src/classes/LabelNumberInclude.ts +70 -0
  11. package/src/classes/ModelInclude.ts +49 -0
  12. package/src/classes/PrefixInclude.ts +71 -0
  13. package/src/classes/SuffixInclude.ts +71 -0
  14. package/src/classes/field/FieldAttributesInclude.ts +100 -0
  15. package/src/classes/field/FieldChangeInclude.ts +52 -0
  16. package/src/classes/field/FieldCodeInclude.ts +69 -0
  17. package/src/classes/field/FieldElementInclude.ts +97 -0
  18. package/src/classes/field/FieldInputCheckInclude.ts +128 -0
  19. package/src/classes/field/FieldMatchInclude.ts +101 -0
  20. package/src/classes/field/FieldPatternInclude.ts +42 -0
  21. package/src/classes/field/FieldTypeInclude.ts +42 -0
  22. package/src/classes/field/FieldValidationInclude.ts +196 -0
  23. package/src/classes/field/FieldValueInclude.ts +318 -0
  24. package/src/classes/field/FieldVisibilityInclude.ts +21 -0
  25. package/src/constructors/Badge/Badge.ts +73 -0
  26. package/src/constructors/Badge/BadgeDesign.tsx +127 -0
  27. package/src/constructors/Badge/BadgeInclude.ts +78 -0
  28. package/src/constructors/Badge/basicTypes.ts +15 -0
  29. package/src/constructors/Badge/index.ts +5 -0
  30. package/src/constructors/Badge/properties.json +36 -0
  31. package/src/constructors/Badge/props.ts +43 -0
  32. package/src/constructors/Badge/style.scss +83 -0
  33. package/src/constructors/Badge/types.ts +47 -0
  34. package/src/constructors/Bars/Bars.ts +188 -0
  35. package/src/constructors/Bars/BarsAction.ts +57 -0
  36. package/src/constructors/Bars/BarsDesign.tsx +229 -0
  37. package/src/constructors/Bars/BarsInclude.ts +116 -0
  38. package/src/constructors/Bars/basicTypes.ts +40 -0
  39. package/src/constructors/Bars/index.ts +6 -0
  40. package/src/constructors/Bars/properties.json +6 -0
  41. package/src/constructors/Bars/props.ts +63 -0
  42. package/src/constructors/Bars/style.scss +18 -0
  43. package/src/constructors/Bars/types.ts +58 -0
  44. package/src/constructors/Button/Button.ts +88 -0
  45. package/src/constructors/Button/ButtonDesign.tsx +136 -0
  46. package/src/constructors/Button/ButtonInclude.ts +80 -0
  47. package/src/constructors/Button/basicTypes.ts +12 -0
  48. package/src/constructors/Button/index.ts +5 -0
  49. package/src/constructors/Button/properties.json +84 -0
  50. package/src/constructors/Button/props.ts +55 -0
  51. package/src/constructors/Button/style.scss +96 -0
  52. package/src/constructors/Button/types.ts +56 -0
  53. package/src/constructors/Cell/Cell.ts +127 -0
  54. package/src/constructors/Cell/CellDesign.tsx +203 -0
  55. package/src/constructors/Cell/basicTypes.ts +6 -0
  56. package/src/constructors/Cell/index.ts +5 -0
  57. package/src/constructors/Cell/properties.json +52 -0
  58. package/src/constructors/Cell/props.ts +61 -0
  59. package/src/constructors/Cell/style.scss +80 -0
  60. package/src/constructors/Cell/types.ts +68 -0
  61. package/src/constructors/Chip/Chip.ts +33 -0
  62. package/src/constructors/Chip/ChipDesign.tsx +26 -0
  63. package/src/constructors/Chip/basicTypes.ts +0 -0
  64. package/src/constructors/Chip/index.ts +4 -0
  65. package/src/constructors/Chip/properties.json +3 -0
  66. package/src/constructors/Chip/props.ts +44 -0
  67. package/src/constructors/Chip/style.scss +6 -0
  68. package/src/constructors/Chip/types.ts +53 -0
  69. package/src/constructors/Field/Field.ts +147 -0
  70. package/src/constructors/Field/FieldDesign.tsx +372 -0
  71. package/src/constructors/Field/FieldIcons.ts +99 -0
  72. package/src/constructors/Field/FieldInclude.ts +72 -0
  73. package/src/constructors/Field/FieldSize.ts +93 -0
  74. package/src/constructors/Field/basicTypes.ts +90 -0
  75. package/src/constructors/Field/index.ts +5 -0
  76. package/src/constructors/Field/properties.json +86 -0
  77. package/src/constructors/Field/props.ts +88 -0
  78. package/src/constructors/Field/style.scss +556 -0
  79. package/src/constructors/Field/types.ts +78 -0
  80. package/src/constructors/FieldCounter/FieldCounter.ts +75 -0
  81. package/src/constructors/FieldCounter/FieldCounterDesign.tsx +122 -0
  82. package/src/constructors/FieldCounter/FieldCounterInclude.ts +98 -0
  83. package/src/constructors/FieldCounter/basicTypes.ts +25 -0
  84. package/src/constructors/FieldCounter/index.ts +6 -0
  85. package/src/constructors/FieldCounter/properties.json +3 -0
  86. package/src/constructors/FieldCounter/props.ts +32 -0
  87. package/src/constructors/FieldCounter/style.scss +4 -0
  88. package/src/constructors/FieldCounter/types.ts +42 -0
  89. package/src/constructors/FieldLabel/FieldLabel.ts +93 -0
  90. package/src/constructors/FieldLabel/FieldLabelDesign.tsx +156 -0
  91. package/src/constructors/FieldLabel/FieldLabelInclude.ts +91 -0
  92. package/src/constructors/FieldLabel/basicTypes.ts +34 -0
  93. package/src/constructors/FieldLabel/index.ts +6 -0
  94. package/src/constructors/FieldLabel/properties.json +4 -0
  95. package/src/constructors/FieldLabel/props.ts +40 -0
  96. package/src/constructors/FieldLabel/style.scss +10 -0
  97. package/src/constructors/FieldLabel/types.ts +49 -0
  98. package/src/constructors/FieldMessage/FieldMessage.ts +79 -0
  99. package/src/constructors/FieldMessage/FieldMessageDesign.tsx +159 -0
  100. package/src/constructors/FieldMessage/FieldMessageInclude.ts +105 -0
  101. package/src/constructors/FieldMessage/FieldMessageMessage.ts +54 -0
  102. package/src/constructors/FieldMessage/basicTypes.ts +27 -0
  103. package/src/constructors/FieldMessage/index.ts +6 -0
  104. package/src/constructors/FieldMessage/properties.json +9 -0
  105. package/src/constructors/FieldMessage/props.ts +40 -0
  106. package/src/constructors/FieldMessage/style.scss +13 -0
  107. package/src/constructors/FieldMessage/types.ts +49 -0
  108. package/src/constructors/Icon/Icon.ts +105 -0
  109. package/src/constructors/Icon/IconDesign.tsx +157 -0
  110. package/src/constructors/Icon/IconInclude.ts +64 -0
  111. package/src/constructors/Icon/IconLiteInclude.ts +121 -0
  112. package/src/constructors/Icon/IconTrailingInclude.ts +106 -0
  113. package/src/constructors/Icon/basicTypes.ts +50 -0
  114. package/src/constructors/Icon/index.ts +8 -0
  115. package/src/constructors/Icon/properties.json +25 -0
  116. package/src/constructors/Icon/props.ts +54 -0
  117. package/src/constructors/Icon/style.scss +106 -0
  118. package/src/constructors/Icon/types.ts +46 -0
  119. package/src/constructors/Image/Image.ts +184 -0
  120. package/src/constructors/Image/ImageAdaptiveGroup.ts +230 -0
  121. package/src/constructors/Image/ImageAdaptiveItem.ts +295 -0
  122. package/src/constructors/Image/ImageBackground.ts +127 -0
  123. package/src/constructors/Image/ImageCalculation.ts +184 -0
  124. package/src/constructors/Image/ImageCalculationList.ts +61 -0
  125. package/src/constructors/Image/ImageCoordinator.ts +104 -0
  126. package/src/constructors/Image/ImageData.ts +99 -0
  127. package/src/constructors/Image/ImageDesign.tsx +137 -0
  128. package/src/constructors/Image/ImageFile.ts +137 -0
  129. package/src/constructors/Image/ImageInclude.ts +53 -0
  130. package/src/constructors/Image/ImagePdf.ts +44 -0
  131. package/src/constructors/Image/ImagePosition.ts +49 -0
  132. package/src/constructors/Image/ImageType.ts +83 -0
  133. package/src/constructors/Image/basicTypes.ts +70 -0
  134. package/src/constructors/Image/index.ts +5 -0
  135. package/src/constructors/Image/properties.json +17 -0
  136. package/src/constructors/Image/props.ts +66 -0
  137. package/src/constructors/Image/style.scss +77 -0
  138. package/src/constructors/Image/types.ts +49 -0
  139. package/src/constructors/List/List.ts +267 -0
  140. package/src/constructors/List/ListControl.ts +194 -0
  141. package/src/constructors/List/ListDesign.tsx +382 -0
  142. package/src/constructors/List/ListFocus.ts +196 -0
  143. package/src/constructors/List/ListGo.ts +283 -0
  144. package/src/constructors/List/ListSearch.ts +113 -0
  145. package/src/constructors/List/basicTypes.ts +3 -0
  146. package/src/constructors/List/index.ts +5 -0
  147. package/src/constructors/List/properties.json +16 -0
  148. package/src/constructors/List/props.ts +76 -0
  149. package/src/constructors/List/style.scss +36 -0
  150. package/src/constructors/List/types.ts +66 -0
  151. package/src/constructors/ListGroup/ListGroup.ts +53 -0
  152. package/src/constructors/ListGroup/ListGroupDesign.tsx +180 -0
  153. package/src/constructors/ListGroup/ListGroupOpen.ts +56 -0
  154. package/src/constructors/ListGroup/basicTypes.ts +3 -0
  155. package/src/constructors/ListGroup/index.ts +5 -0
  156. package/src/constructors/ListGroup/properties.json +15 -0
  157. package/src/constructors/ListGroup/props.ts +30 -0
  158. package/src/constructors/ListGroup/style.scss +18 -0
  159. package/src/constructors/ListGroup/types.ts +51 -0
  160. package/src/constructors/ListItem/ListItem.ts +115 -0
  161. package/src/constructors/ListItem/ListItemDesign.tsx +196 -0
  162. package/src/constructors/ListItem/basicTypes.ts +3 -0
  163. package/src/constructors/ListItem/index.ts +5 -0
  164. package/src/constructors/ListItem/properties.json +52 -0
  165. package/src/constructors/ListItem/props.ts +78 -0
  166. package/src/constructors/ListItem/style.scss +152 -0
  167. package/src/constructors/ListItem/types.ts +78 -0
  168. package/src/constructors/ListMenu/ListMenu.ts +52 -0
  169. package/src/constructors/ListMenu/ListMenuDesign.tsx +127 -0
  170. package/src/constructors/ListMenu/basicTypes.ts +3 -0
  171. package/src/constructors/ListMenu/index.ts +5 -0
  172. package/src/constructors/ListMenu/properties.json +19 -0
  173. package/src/constructors/ListMenu/props.ts +34 -0
  174. package/src/constructors/ListMenu/style.scss +5 -0
  175. package/src/constructors/ListMenu/types.ts +54 -0
  176. package/src/constructors/Mask/Mask.ts +321 -0
  177. package/src/constructors/Mask/MaskBuffer.ts +89 -0
  178. package/src/constructors/Mask/MaskCharacter.ts +192 -0
  179. package/src/constructors/Mask/MaskCharacterLength.ts +40 -0
  180. package/src/constructors/Mask/MaskData.ts +287 -0
  181. package/src/constructors/Mask/MaskDate.ts +157 -0
  182. package/src/constructors/Mask/MaskDesign.tsx +217 -0
  183. package/src/constructors/Mask/MaskEmit.ts +140 -0
  184. package/src/constructors/Mask/MaskEvent.ts +347 -0
  185. package/src/constructors/Mask/MaskFocus.ts +49 -0
  186. package/src/constructors/Mask/MaskFormat.ts +216 -0
  187. package/src/constructors/Mask/MaskItem.ts +218 -0
  188. package/src/constructors/Mask/MaskMatch.ts +73 -0
  189. package/src/constructors/Mask/MaskPattern.ts +123 -0
  190. package/src/constructors/Mask/MaskRight.ts +43 -0
  191. package/src/constructors/Mask/MaskRubber.ts +156 -0
  192. package/src/constructors/Mask/MaskRubberItem.ts +96 -0
  193. package/src/constructors/Mask/MaskRubberTransition.ts +50 -0
  194. package/src/constructors/Mask/MaskSelection.ts +208 -0
  195. package/src/constructors/Mask/MaskSpecial.ts +179 -0
  196. package/src/constructors/Mask/MaskType.ts +103 -0
  197. package/src/constructors/Mask/MaskValidation.ts +102 -0
  198. package/src/constructors/Mask/MaskValue.ts +225 -0
  199. package/src/constructors/Mask/MaskValueBasic.ts +87 -0
  200. package/src/constructors/Mask/MaskView.ts +169 -0
  201. package/src/constructors/Mask/basicTypes.ts +49 -0
  202. package/src/constructors/Mask/index.ts +5 -0
  203. package/src/constructors/Mask/properties.json +29 -0
  204. package/src/constructors/Mask/props.ts +70 -0
  205. package/src/constructors/Mask/style.scss +104 -0
  206. package/src/constructors/Mask/types.ts +71 -0
  207. package/src/constructors/Menu/Menu.ts +179 -0
  208. package/src/constructors/Menu/MenuDesign.tsx +244 -0
  209. package/src/constructors/Menu/MenuInclude.ts +110 -0
  210. package/src/constructors/Menu/MenuRequest.ts +101 -0
  211. package/src/constructors/Menu/MenuSearch.ts +49 -0
  212. package/src/constructors/Menu/MenuValue.ts +73 -0
  213. package/src/constructors/Menu/MenuWindow.ts +89 -0
  214. package/src/constructors/Menu/basicTypes.ts +41 -0
  215. package/src/constructors/Menu/index.ts +6 -0
  216. package/src/constructors/Menu/properties.json +17 -0
  217. package/src/constructors/Menu/props.ts +79 -0
  218. package/src/constructors/Menu/style.scss +17 -0
  219. package/src/constructors/Menu/types.ts +79 -0
  220. package/src/constructors/MotionTransform/MotionTransform.ts +87 -0
  221. package/src/constructors/MotionTransform/MotionTransformClassesInclude.ts +38 -0
  222. package/src/constructors/MotionTransform/MotionTransformDesign.tsx +242 -0
  223. package/src/constructors/MotionTransform/MotionTransformElement.ts +220 -0
  224. package/src/constructors/MotionTransform/MotionTransformEvent.ts +118 -0
  225. package/src/constructors/MotionTransform/MotionTransformGo.ts +47 -0
  226. package/src/constructors/MotionTransform/MotionTransformInclude.ts +123 -0
  227. package/src/constructors/MotionTransform/MotionTransformSize.ts +97 -0
  228. package/src/constructors/MotionTransform/MotionTransformState.ts +250 -0
  229. package/src/constructors/MotionTransform/basicTypes.ts +121 -0
  230. package/src/constructors/MotionTransform/index.ts +7 -0
  231. package/src/constructors/MotionTransform/properties.json +35 -0
  232. package/src/constructors/MotionTransform/props.ts +50 -0
  233. package/src/constructors/MotionTransform/style.scss +180 -0
  234. package/src/constructors/MotionTransform/types.ts +86 -0
  235. package/src/constructors/Progress/Progress.ts +184 -0
  236. package/src/constructors/Progress/ProgressDesign.tsx +175 -0
  237. package/src/constructors/Progress/ProgressInclude.ts +67 -0
  238. package/src/constructors/Progress/basicTypes.ts +12 -0
  239. package/src/constructors/Progress/index.ts +6 -0
  240. package/src/constructors/Progress/properties.json +47 -0
  241. package/src/constructors/Progress/props.ts +54 -0
  242. package/src/constructors/Progress/style.scss +374 -0
  243. package/src/constructors/Progress/types.ts +43 -0
  244. package/src/constructors/Ripple/Ripple.ts +46 -0
  245. package/src/constructors/Ripple/RippleDesign.tsx +112 -0
  246. package/src/constructors/Ripple/RippleInclude.ts +39 -0
  247. package/src/constructors/Ripple/RippleItem.ts +62 -0
  248. package/src/constructors/Ripple/basicTypes.ts +3 -0
  249. package/src/constructors/Ripple/index.ts +6 -0
  250. package/src/constructors/Ripple/properties.json +9 -0
  251. package/src/constructors/Ripple/props.ts +28 -0
  252. package/src/constructors/Ripple/style.scss +62 -0
  253. package/src/constructors/Ripple/types.ts +41 -0
  254. package/src/constructors/Scrollbar/Scrollbar.ts +66 -0
  255. package/src/constructors/Scrollbar/ScrollbarBorder.ts +243 -0
  256. package/src/constructors/Scrollbar/ScrollbarDesign.tsx +126 -0
  257. package/src/constructors/Scrollbar/ScrollbarInclude.ts +80 -0
  258. package/src/constructors/Scrollbar/basicTypes.ts +42 -0
  259. package/src/constructors/Scrollbar/index.ts +5 -0
  260. package/src/constructors/Scrollbar/properties.json +33 -0
  261. package/src/constructors/Scrollbar/props.ts +37 -0
  262. package/src/constructors/Scrollbar/style.scss +117 -0
  263. package/src/constructors/Scrollbar/types.ts +52 -0
  264. package/src/constructors/Skeleton/Skeleton.ts +86 -0
  265. package/src/constructors/Skeleton/SkeletonDesign.tsx +117 -0
  266. package/src/constructors/Skeleton/SkeletonInclude.ts +61 -0
  267. package/src/constructors/Skeleton/basicTypes.ts +16 -0
  268. package/src/constructors/Skeleton/const.ts +1 -0
  269. package/src/constructors/Skeleton/index.ts +6 -0
  270. package/src/constructors/Skeleton/properties.json +24 -0
  271. package/src/constructors/Skeleton/props.ts +28 -0
  272. package/src/constructors/Skeleton/style.scss +112 -0
  273. package/src/constructors/Skeleton/types.ts +46 -0
  274. package/src/constructors/Window/Window.ts +212 -0
  275. package/src/constructors/Window/WindowClasses.ts +180 -0
  276. package/src/constructors/Window/WindowClassesInclude.ts +39 -0
  277. package/src/constructors/Window/WindowClient.ts +93 -0
  278. package/src/constructors/Window/WindowCoordinates.ts +257 -0
  279. package/src/constructors/Window/WindowDesign.tsx +278 -0
  280. package/src/constructors/Window/WindowElement.ts +84 -0
  281. package/src/constructors/Window/WindowEmit.ts +52 -0
  282. package/src/constructors/Window/WindowEvent.ts +157 -0
  283. package/src/constructors/Window/WindowFlash.ts +70 -0
  284. package/src/constructors/Window/WindowHook.ts +110 -0
  285. package/src/constructors/Window/WindowInclude.ts +134 -0
  286. package/src/constructors/Window/WindowOpen.ts +292 -0
  287. package/src/constructors/Window/WindowOrigin.ts +85 -0
  288. package/src/constructors/Window/WindowPersistent.ts +89 -0
  289. package/src/constructors/Window/WindowPosition.ts +358 -0
  290. package/src/constructors/Window/WindowStatic.ts +102 -0
  291. package/src/constructors/Window/WindowStatus.ts +138 -0
  292. package/src/constructors/Window/WindowStyles.ts +78 -0
  293. package/src/constructors/Window/WindowVerification.ts +287 -0
  294. package/src/constructors/Window/basicTypes.ts +186 -0
  295. package/src/constructors/Window/index.ts +7 -0
  296. package/src/constructors/Window/properties.json +236 -0
  297. package/src/constructors/Window/props.ts +88 -0
  298. package/src/constructors/Window/style.scss +262 -0
  299. package/src/constructors/Window/types.ts +124 -0
  300. package/src/functions/getClassTegAStatic.ts +8 -0
  301. package/src/library.ts +36 -0
  302. package/src/types/captionTypes.ts +15 -0
  303. package/src/types/descriptionTypes.ts +15 -0
  304. package/src/types/enabledTypes.ts +9 -0
  305. package/src/types/eventClickTypes.ts +51 -0
  306. package/src/types/fieldTypes.ts +282 -0
  307. package/src/types/labelTypes.ts +30 -0
  308. package/src/types/modelTypes.ts +23 -0
  309. package/src/types/prefixTypes.ts +15 -0
  310. package/src/types/suffixTypes.ts +15 -0
  311. package/src/vite-env.d.ts +1 -0
@@ -0,0 +1,217 @@
1
+ import { h, type VNode } from 'vue'
2
+ import {
3
+ type ConstrOptions,
4
+ type ConstrStyles,
5
+ DesignConstructorAbstract
6
+ } from '@dxtmisha/functional'
7
+
8
+ import { Mask } from './Mask'
9
+
10
+ import {
11
+ type MaskPropsBasic
12
+ } from './props'
13
+ import {
14
+ type MaskClasses,
15
+ type MaskComponents,
16
+ type MaskEmits,
17
+ type MaskExpose,
18
+ type MaskSlots
19
+ } from './types'
20
+
21
+ /**
22
+ * MaskDesign
23
+ */
24
+ export class MaskDesign<
25
+ COMP extends MaskComponents,
26
+ EXPOSE extends MaskExpose,
27
+ CLASSES extends MaskClasses,
28
+ P extends MaskPropsBasic
29
+ > extends DesignConstructorAbstract<
30
+ HTMLInputElement,
31
+ COMP,
32
+ MaskEmits,
33
+ EXPOSE,
34
+ MaskSlots,
35
+ CLASSES,
36
+ P
37
+ > {
38
+ protected readonly item: Mask
39
+
40
+ /**
41
+ * Constructor
42
+ * @param name class name/ название класса
43
+ * @param props properties/ свойства
44
+ * @param options list of additional parameters/ список дополнительных параметров
45
+ */
46
+ constructor(
47
+ name: string,
48
+ props: Readonly<P>,
49
+ options?: ConstrOptions<COMP, MaskEmits, P>
50
+ ) {
51
+ super(
52
+ name,
53
+ props,
54
+ options
55
+ )
56
+
57
+ this.item = new Mask(
58
+ this.props,
59
+ this.refs,
60
+ this.element,
61
+ this.getDesign(),
62
+ this.getName(),
63
+ this.components,
64
+ this.slots,
65
+ this.emits
66
+ )
67
+
68
+ this.init()
69
+ }
70
+
71
+ /**
72
+ * Initialization of all the necessary properties for work
73
+ *
74
+ * Инициализация всех необходимых свойств для работы.
75
+ */
76
+ protected initExpose(): EXPOSE {
77
+ return {
78
+ valueBasic: this.item.basic,
79
+ value: this.item.value.item,
80
+ setValue: this.item.set,
81
+ clear: this.item.clear
82
+ } as EXPOSE
83
+ }
84
+
85
+ /**
86
+ * Improvement of the obtained list of classes.
87
+ *
88
+ * Доработка полученного списка классов.
89
+ */
90
+ protected initClasses(): Partial<CLASSES> {
91
+ return {
92
+ main: this.item.classes.value,
93
+ ...{
94
+ // :classes [!] System label / Системная метка
95
+ input: this.getSubClass('input'),
96
+ character: this.getSubClass('character'),
97
+ characterItem: this.getSubClass('character__item')
98
+ // :classes [!] System label / Системная метка
99
+ }
100
+ } as Partial<CLASSES>
101
+ }
102
+
103
+ /**
104
+ * Refinement of the received list of styles.
105
+ *
106
+ * Доработка полученного списка стилей.
107
+ */
108
+ protected initStyles(): ConstrStyles {
109
+ return {}
110
+ }
111
+
112
+ /**
113
+ * A method for rendering.
114
+ *
115
+ * Метод для рендеринга.
116
+ */
117
+ protected initRender(): VNode {
118
+ const children: any[] = [
119
+ ...this.renderData(),
120
+ ...this.renderInput(),
121
+ ...this.renderView()
122
+ ]
123
+
124
+ return h('span', {
125
+ ...this.getAttrs(),
126
+ class: this.classes?.value.main
127
+ }, children)
128
+ }
129
+
130
+ /**
131
+ * Element for storing the final data.
132
+ *
133
+ * Элемент для хранения конечных данных.
134
+ */
135
+ protected renderData = (): VNode[] => {
136
+ if (this.props.name) {
137
+ return [
138
+ h('input', {
139
+ type: 'hidden',
140
+ name: this.props.name,
141
+ value: this.item.value.item.value
142
+ })
143
+ ]
144
+ }
145
+
146
+ return []
147
+ }
148
+
149
+ /**
150
+ * Rendering method for input.
151
+ *
152
+ * Метод рендеринга для ввода.
153
+ */
154
+ protected renderInput = (): VNode[] => {
155
+ return [
156
+ h(
157
+ 'input',
158
+ {
159
+ ...this.props.inputAttrs,
160
+
161
+ ref: this.element,
162
+ class: this.classes?.value.input,
163
+
164
+ type: 'text',
165
+ value: this.item.basic.value,
166
+
167
+ onFocus: this.item.event.onFocus,
168
+ onBlur: this.item.event.onBlur,
169
+ onKeydown: this.item.event.onKeydown,
170
+ onKeyup: this.item.event.onKeyup,
171
+ onBeforeinput: this.item.event.onBeforeinput,
172
+ onInput: this.item.event.onInput,
173
+ onChange: this.item.event.onChange,
174
+ onPaste: this.item.event.onPaste,
175
+ onClick: this.item.event.onClick
176
+ }
177
+ )
178
+ ]
179
+ }
180
+
181
+ /**
182
+ * Rendering method for displaying the mask and the input data.
183
+ *
184
+ * Метод рендеринга для вывода маски и вводимых данных.
185
+ */
186
+ protected renderView = (): VNode[] => {
187
+ const view = this.item.view.item.value
188
+ const children: any[] = []
189
+ let innerHTML: undefined | string = undefined
190
+
191
+ if (view.length > 0) {
192
+ view.forEach((character, key) => {
193
+ children.push(
194
+ h('span', {
195
+ key,
196
+ class: character.className,
197
+ innerHTML: character.value === ' ' ? '&nbsp;' : character.value
198
+ })
199
+ )
200
+ })
201
+ } else {
202
+ innerHTML = '&nbsp;'
203
+ }
204
+
205
+ return [
206
+ h(
207
+ 'span',
208
+ {
209
+ 'class': this.classes?.value.character,
210
+ 'data-length': '1',
211
+ innerHTML
212
+ },
213
+ children
214
+ )
215
+ ]
216
+ }
217
+ }
@@ -0,0 +1,140 @@
1
+ import { MaskValidation } from './MaskValidation'
2
+ import type { ConstrEmit } from '@dxtmisha/functional'
3
+
4
+ import type { MaskEventData } from './basicTypes'
5
+ import type { MaskEmits } from './types'
6
+
7
+ /**
8
+ * Class for event invocation
9
+ *
10
+ * Класс для вызова событий
11
+ */
12
+ export class MaskEmit {
13
+ /** Current event type key/ Текущий ключ типа события */
14
+ protected type?: string & keyof MaskEmits
15
+ /** Native event object/ Объект нативного события */
16
+ protected event?: Event
17
+
18
+ /**
19
+ * Constructor
20
+ * @param validation object for working with validation/ объект для работы с валидацией
21
+ * @param emits emit function (Design system bridge)/ функция вызова события
22
+ */
23
+ constructor(
24
+ protected readonly validation: MaskValidation,
25
+ protected readonly emits?: ConstrEmit<MaskEmits>
26
+ ) {
27
+ }
28
+
29
+ /**
30
+ * Checks whether extra data (validation) should be generated for current event
31
+ *
32
+ * Проверяет, нужно ли генерировать дополнительные данные (валидацию) для текущего события
33
+ */
34
+ isValue(): boolean {
35
+ return Boolean(this.type && ['input', 'change'].indexOf(this.type) >= 0)
36
+ }
37
+
38
+ /**
39
+ * Initializes event handling and emits event with optional validation payload
40
+ *
41
+ * Инициализирует обработку и вызывает событие с опциональной валидацией
42
+ */
43
+ go(): this {
44
+ if (
45
+ this.type
46
+ && this.event
47
+ ) {
48
+ const validation = this.isValue() ? this.validation.item.value : undefined
49
+
50
+ this.emits?.(
51
+ this.type as 'input',
52
+ this.event as InputEvent,
53
+ validation as MaskEventData
54
+ )
55
+
56
+ if (
57
+ this.type === 'inputLite'
58
+ || this.type === 'changeLite'
59
+ ) {
60
+ this.emits?.(
61
+ this.type as never,
62
+ validation as never
63
+ )
64
+ }
65
+ }
66
+
67
+ return this
68
+ }
69
+
70
+ /**
71
+ * Sets both event type and native event object
72
+ *
73
+ * Устанавливает одновременно тип события и объект события
74
+ * @param type event name/ название события
75
+ * @param event event object/ объект события
76
+ */
77
+ set<E extends Event>(
78
+ type: string & keyof MaskEmits,
79
+ event: E
80
+ ): this {
81
+ this.setType(type)
82
+ this.setEvent(event)
83
+
84
+ return this
85
+ }
86
+
87
+ /**
88
+ * Sets event type
89
+ *
90
+ * Устанавливает тип события
91
+ * @param type event name/ название события
92
+ */
93
+ setType(type: string & keyof MaskEmits): this {
94
+ this.type = type
95
+ return this
96
+ }
97
+
98
+ /**
99
+ * Sets native event object
100
+ *
101
+ * Устанавливает объект события
102
+ * @param event event object/ объект события
103
+ */
104
+ setEvent<E extends Event>(event: E): this {
105
+ this.event = event
106
+ return this
107
+ }
108
+
109
+ /**
110
+ * Resets all internal state (type + event)
111
+ *
112
+ * Сбрасывает всё внутреннее состояние (тип и событие)
113
+ */
114
+ reset(): this {
115
+ this.resetType()
116
+ this.resetEvent()
117
+
118
+ return this
119
+ }
120
+
121
+ /**
122
+ * Resets stored event type
123
+ *
124
+ * Сбрасывает сохранённый тип события
125
+ */
126
+ resetType(): this {
127
+ this.type = undefined
128
+ return this
129
+ }
130
+
131
+ /**
132
+ * Resets stored native event
133
+ *
134
+ * Сбрасывает сохранённый объект события
135
+ */
136
+ resetEvent(): this {
137
+ this.event = undefined
138
+ return this
139
+ }
140
+ }
@@ -0,0 +1,347 @@
1
+ import { eventStopPropagation, getClipboardData } from '@dxtmisha/functional'
2
+
3
+ import { MaskBuffer } from './MaskBuffer'
4
+ import { MaskFocus } from './MaskFocus'
5
+ import { MaskCharacterLength } from './MaskCharacterLength'
6
+ import { MaskRight } from './MaskRight'
7
+ import { MaskSelection } from './MaskSelection'
8
+ import { MaskValueBasic } from './MaskValueBasic'
9
+ import { MaskEmit } from './MaskEmit'
10
+ import { MaskData } from './MaskData'
11
+
12
+ import type { MaskEventSelection } from './basicTypes'
13
+
14
+ /**
15
+ * Class for working with events.
16
+ *
17
+ * Класс для работы с событиями.
18
+ */
19
+ export class MaskEvent {
20
+ /** Change flag/ Флаг изменения */
21
+ protected change: boolean = false
22
+ /** Unidentified selection data/ Данные неопознанного выделения */
23
+ protected unidentified?: MaskEventSelection
24
+
25
+ /**
26
+ * Constructor
27
+ * @param buffer object for managing cached input data/ объект управления кешированными вводимыми данными
28
+ * @param focus object for handling input field focus/ объект для работы с фокусировкой поля ввода
29
+ * @param characterLength object for managing input length/ объект управления длиной ввода
30
+ * @param right object for right alignment/ объект для выравнивания направо
31
+ * @param selection object for managing cursor position/ объект для управления положением курсора
32
+ * @param valueBasic object for working with base values/ объект для работы с базовыми значениями
33
+ * @param emit object for handling callback events/ объект для работы с обратными событиями
34
+ * @param data object for managing input/ объект для управления вводом
35
+ */
36
+ constructor(
37
+ protected readonly buffer: MaskBuffer,
38
+ protected readonly focus: MaskFocus,
39
+ protected readonly characterLength: MaskCharacterLength,
40
+ protected readonly right: MaskRight,
41
+ protected readonly selection: MaskSelection,
42
+ protected readonly valueBasic: MaskValueBasic,
43
+ protected readonly emit: MaskEmit,
44
+ protected readonly data: MaskData
45
+ ) {}
46
+
47
+ /**
48
+ * Capture of the event in focus.
49
+ *
50
+ * Перехват события при получении фокуса.
51
+ * @param event event object/ объект события
52
+ */
53
+ readonly onFocus = (event: FocusEvent): void => {
54
+ this.change = false
55
+ this.focus.in()
56
+
57
+ this.emit
58
+ .set('focus', event)
59
+ .go()
60
+ }
61
+
62
+ /**
63
+ * Capture of the event when focus is lost.
64
+ *
65
+ * Перехват события при потере фокуса.
66
+ * @param event event object/ объект события
67
+ */
68
+ readonly onBlur = (event: FocusEvent): void => {
69
+ if (this.change) {
70
+ this.emit
71
+ .setType('change')
72
+ .go()
73
+ }
74
+
75
+ this.focus.out()
76
+ this.emit
77
+ .set('blur', event)
78
+ .go()
79
+ }
80
+
81
+ /**
82
+ * Intercepting key press to get a character.
83
+ *
84
+ * Перехват нажатия клавиши для получения символа.
85
+ * @param event invoked event/ вызываемое событие
86
+ */
87
+ readonly onKeydown = (event: KeyboardEvent): void => {
88
+ const info = this.getSelectionInfo(event)
89
+ const { start, end } = info
90
+
91
+ this.emit
92
+ .set('keydown', event)
93
+ .go()
94
+
95
+ if (this.isMetaKey(event)) {
96
+ return undefined
97
+ }
98
+
99
+ if (this.isKey(event)) {
100
+ if (event.key === 'Backspace') {
101
+ if (start > 0 || start !== end) {
102
+ this.data.pop(start, end)
103
+ }
104
+ } else if (event.key.length <= 1) {
105
+ if (start === end) {
106
+ if (this.buffer.go(event.key)) {
107
+ this.data.add(start, event.key)
108
+ }
109
+ } else {
110
+ this.buffer.goStart()
111
+ this.data
112
+ .pop(start, end)
113
+ .add(this.selection.getShift(), event.key)
114
+ }
115
+ }
116
+ } else {
117
+ this.unidentified = info
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Intercept key release to check arrow presses.
123
+ *
124
+ * Перехват отпускания клавиши для проверки нажатия стрелок.
125
+ * @param event invoked event/ вызываемое событие
126
+ */
127
+ readonly onKeyup = (event: KeyboardEvent): void => {
128
+ this.emit
129
+ .set('keyup', event)
130
+ .go()
131
+
132
+ if (this.isMetaKey(event)) {
133
+ return undefined
134
+ }
135
+
136
+ if (
137
+ this.isKey(event)
138
+ && [
139
+ 'ArrowUp',
140
+ 'ArrowRight',
141
+ 'ArrowDown',
142
+ 'ArrowLeft'
143
+ ].indexOf(event.key) >= 0
144
+ ) {
145
+ this.makeToEnd(event)
146
+ this.makeToStart(event)
147
+ }
148
+ }
149
+
150
+ /**
151
+ * Intercepting the event before data modification.
152
+ *
153
+ * Перехват события перед изменением данных.
154
+ * @param event invoked event/ вызываемое событие
155
+ */
156
+ readonly onBeforeinput = (event: InputEvent): void => {
157
+ this.emit
158
+ .set('beforeinput', event)
159
+ .go()
160
+
161
+ if (!this.unidentified) {
162
+ this.makeChange(event)
163
+ eventStopPropagation(event)
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Intercepting the event during data modification.
169
+ *
170
+ * Перехват события при изменении данных.
171
+ * @param event invoked event/ вызываемое событие
172
+ */
173
+ readonly onInput = (event: InputEvent): void => {
174
+ if (this.unidentified) {
175
+ const target = event.target as HTMLInputElement
176
+
177
+ if (
178
+ this.unidentified.length > target.value.length
179
+ || this.unidentified.start !== this.unidentified.end
180
+ ) {
181
+ this.data.pop(this.unidentified.start, this.unidentified.end)
182
+ }
183
+
184
+ if ('data' in event) {
185
+ if (
186
+ event.data
187
+ && this.buffer.go(event.data)
188
+ ) {
189
+ this.data.add(this.unidentified.start, event.data)
190
+ }
191
+ } else {
192
+ this.data.reset(target.value)
193
+ }
194
+
195
+ this.makeChange(event)
196
+ this.unidentified = undefined
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Intercept paste event for inserting data from clipboard.
202
+ *
203
+ * Перехват события вставки данных из буфера обмена.
204
+ * @param event invoked event/ вызываемое событие
205
+ */
206
+ readonly onPaste = (event: ClipboardEvent): void => {
207
+ const { start, end } = this.getSelectionInfo(event)
208
+
209
+ getClipboardData(event)
210
+ .then((data) => {
211
+ const text = data.split('')
212
+
213
+ if (start === end) {
214
+ this.data.add(start, this.data.extra(text))
215
+ } else {
216
+ this.data
217
+ .pop(start, end)
218
+ .add(this.selection.getShift(), this.data.extra(text))
219
+ }
220
+
221
+ this.change = true
222
+ this.emit
223
+ .set('paste', event)
224
+ .go()
225
+ })
226
+ .catch(error => console.error('getClipboardData', error))
227
+ }
228
+
229
+ /**
230
+ * Intercept change event (autocomplete support).
231
+ *
232
+ * Перехват события изменения (поддержка автозаполнения).
233
+ * @param event invoked event/ вызываемое событие
234
+ */
235
+ readonly onChange = (event: Event): void => {
236
+ const target = event.target as HTMLInputElement
237
+
238
+ this.data.reset(target.value)
239
+ this.emit
240
+ .set('change', event)
241
+ .go()
242
+ }
243
+
244
+ /**
245
+ * Intercept click to adjust selection if needed.
246
+ *
247
+ * Перехват клика для корректировки выделения при необходимости.
248
+ * @param event invoked event/ вызываемое событие
249
+ */
250
+ readonly onClick = (event: MouseEvent): void => {
251
+ this.makeToEnd(event)
252
+ this.makeToStart(event)
253
+ }
254
+
255
+ /**
256
+ * Was a meta button pressed.
257
+ *
258
+ * Была ли нажата мета-кнопка.
259
+ * @param event invoked event/ вызываемое событие
260
+ */
261
+ protected isMetaKey(event: KeyboardEvent): boolean {
262
+ return event.metaKey || event.altKey || event.ctrlKey
263
+ }
264
+
265
+ /**
266
+ * Checks key value in the event.
267
+ *
268
+ * Проверяет значение key в событии.
269
+ * @param event invoked event/ вызываемое событие
270
+ */
271
+ protected isKey(event: KeyboardEvent): boolean {
272
+ return 'key' in event && event.key !== 'Unidentified'
273
+ }
274
+
275
+ /**
276
+ * Getting data about selection on the event element.
277
+ *
278
+ * Получение данных о выделении у элемента события.
279
+ * @param event invoked event/ вызываемое событие
280
+ */
281
+ protected getSelectionInfo(event: Event): MaskEventSelection {
282
+ const target = event.target as HTMLInputElement
283
+
284
+ return {
285
+ target,
286
+ start: target.selectionStart ?? 0,
287
+ end: target.selectionEnd ?? 0,
288
+ length: target.value.length
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Preparing to send an event.
294
+ *
295
+ * Подготовка для отправки события.
296
+ * @param event invoked event/ вызываемое событие
297
+ */
298
+ protected makeChange(event: Event): void {
299
+ this.change = true
300
+
301
+ this.emit.set('input', event)
302
+
303
+ if (this.buffer.is()) {
304
+ return
305
+ }
306
+
307
+ this.emit.go()
308
+ this.emit.resetType()
309
+ }
310
+
311
+ /**
312
+ * Changes cursor position if alignment is right.
313
+ *
314
+ * Изменяет позицию курсора, если выравнивание справа.
315
+ * @param event invoked event/ вызываемое событие
316
+ */
317
+ protected makeToEnd(event: Event): void {
318
+ if (this.right.isRight()) {
319
+ const length = this.valueBasic.getLength()
320
+ const { target, start, end } = this.getSelectionInfo(event)
321
+
322
+ if (start > length) {
323
+ target.selectionStart = length
324
+ }
325
+
326
+ if (end > length) {
327
+ target.selectionEnd = length
328
+ }
329
+ }
330
+ }
331
+
332
+ /**
333
+ * Check selection from the start (before special chars).
334
+ *
335
+ * Проверка выделения спереди (перед спецсимволами).
336
+ * @param event invoked event/ вызываемое событие
337
+ */
338
+ protected makeToStart(event: Event): void {
339
+ const selection = this.selection.getFirst()
340
+ const { target, start } = this.getSelectionInfo(event)
341
+
342
+ if (start < selection) {
343
+ target.selectionStart = selection
344
+ target.selectionEnd = selection
345
+ }
346
+ }
347
+ }