@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,192 @@
1
+ import { ref } from 'vue'
2
+
3
+ import { MaskRubberItem } from './MaskRubberItem'
4
+ import { MaskCharacterLength } from './MaskCharacterLength'
5
+ import { MaskSpecial } from './MaskSpecial'
6
+ import { MaskItem } from './MaskItem'
7
+ import { MaskSelection } from './MaskSelection'
8
+
9
+ import { MASK_CHAR_DELETE } from './basicTypes'
10
+ import type { MaskProps } from './props'
11
+
12
+ /**
13
+ * Class for working with and storing input characters.
14
+ *
15
+ * Класс для работы и хранения вводимых символов.
16
+ */
17
+ export class MaskCharacter {
18
+ /** Entered characters list/ Список введённых символов */
19
+ readonly item = ref<string[]>([])
20
+
21
+ /**
22
+ * Constructor
23
+ * @param props input data/ входные данные
24
+ * @param rubberItem object for working with rubber elements/ объект для работы с резиновыми элементами
25
+ * @param characterLength object for managing input length/ объект управления длиной ввода
26
+ * @param special object for working with special characters/ объект для работы со специальными символами
27
+ * @param mask object for managing masks/ объект управления маской
28
+ * @param selection object for managing cursor position/ объект для управления положением курсора
29
+ */
30
+ constructor(
31
+ protected readonly props: MaskProps,
32
+ protected readonly rubberItem: MaskRubberItem,
33
+ protected readonly characterLength: MaskCharacterLength,
34
+ protected readonly special: MaskSpecial,
35
+ protected readonly mask: MaskItem,
36
+ protected readonly selection: MaskSelection
37
+ ) {
38
+ }
39
+
40
+ /**
41
+ * Checks if the value is filled.
42
+ *
43
+ * Проверяет, заполнено ли значение.
44
+ */
45
+ is(): boolean {
46
+ return this.item.value.length > 0
47
+ }
48
+
49
+ /**
50
+ * Checks if the selected character was previously deleted.
51
+ *
52
+ * Проверяет, является ли выделенный символ ранее удалённым.
53
+ */
54
+ isCharDelete(): boolean {
55
+ const key = this.selection.get()
56
+
57
+ return key in this.item.value
58
+ && this.item.value[key] === MASK_CHAR_DELETE
59
+ }
60
+
61
+ /**
62
+ * Getting the selected mask character.
63
+ *
64
+ * Получение выбранного символа маски.
65
+ */
66
+ getFocus(): string {
67
+ return this.mask.get(this.selection.getFocus())
68
+ }
69
+
70
+ /**
71
+ * Getting the mask character by the key number of the nearest special character.
72
+ *
73
+ * Получение символа маски по номеру ключа ближайшего специального символа.
74
+ */
75
+ getImmediate(): string {
76
+ return this.mask.get(this.selection.getImmediate())
77
+ }
78
+
79
+ /**
80
+ * Getting the next mask character.
81
+ *
82
+ * Получение следующего символа маски.
83
+ */
84
+ getNext(): string {
85
+ return this.mask.get(this.selection.getNext())
86
+ }
87
+
88
+ /**
89
+ * Adding 1 entered character at its selection location.
90
+ *
91
+ * Добавление 1 введённого символа по месту его выделения.
92
+ * @param char entered character/ введённый символ
93
+ */
94
+ add(char: string): this {
95
+ this.item.value.splice(this.selection.get(), this.isCharDelete() ? 1 : 0, char)
96
+ this.selection.goNext().resetImmediate()
97
+ this.updateLength()
98
+
99
+ return this
100
+ }
101
+
102
+ /**
103
+ * Deleting 1 entered character at its selection location.
104
+ *
105
+ * Удаление 1 введённого символа по месту его выделения.
106
+ */
107
+ pop(): this {
108
+ const key = this.selection.get() - 1
109
+
110
+ if (this.isSpecialNextAnother()) {
111
+ this.item.value[key] = MASK_CHAR_DELETE
112
+ } else {
113
+ this.item.value.splice(key, 1)
114
+ this.updateLength()
115
+ }
116
+
117
+ this.selection.goBack().resetImmediate()
118
+
119
+ return this
120
+ }
121
+
122
+ /**
123
+ * Resets the values to the initial values.
124
+ *
125
+ * Сбрасывает значения до начальных.
126
+ */
127
+ reset(): this {
128
+ this.item.value = []
129
+ this.selection.set(0).resetImmediate()
130
+ this.updateLength()
131
+
132
+ return this
133
+ }
134
+
135
+ /**
136
+ * Shifts by 1 value depending on the direction of selection change.
137
+ *
138
+ * Сдвигает на 1 значение в зависимости от направления изменения выделения.
139
+ * @param status shift status/ статус сдвига
140
+ */
141
+ shift(status: number = 1): this {
142
+ this.characterLength.set(this.item.value.length + status)
143
+ return this
144
+ }
145
+
146
+ /**
147
+ * Checks if there is another group of special characters ahead.
148
+ *
149
+ * Проверяет, есть ли впереди другая группа специальных символов.
150
+ */
151
+ protected isSpecialNextAnother(): boolean {
152
+ const selection = this.selection.get() - 1
153
+ const length = this.item.value.length
154
+
155
+ if (
156
+ this.props.groupSave
157
+ && selection >= 0
158
+ && selection <= length
159
+ ) {
160
+ const info = this.mask.info.value
161
+ const char = info?.[selection]?.char
162
+
163
+ if (char && !this.rubberItem.is(char)) {
164
+ for (let i: number = selection; i < length; i++) {
165
+ if (info?.[i]) {
166
+ const charNext = info[i]?.char
167
+
168
+ if (
169
+ charNext
170
+ && this.special.isSpecial(charNext)
171
+ && char !== charNext
172
+ ) {
173
+ return true
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+
180
+ return false
181
+ }
182
+
183
+ /**
184
+ * Updates the length of entered characters.
185
+ *
186
+ * Обновляет длину введённых символов.
187
+ */
188
+ protected updateLength(): this {
189
+ this.characterLength.set(this.item.value.length)
190
+ return this
191
+ }
192
+ }
@@ -0,0 +1,40 @@
1
+ import { ref } from 'vue'
2
+
3
+ /**
4
+ * Class for storing the length of entered characters.
5
+ *
6
+ * Класс для хранения длины введённых символов.
7
+ */
8
+ export class MaskCharacterLength {
9
+ /** Current length value/ Текущее значение длины */
10
+ protected length = ref<number>(0)
11
+
12
+ /**
13
+ * Checks if there is at least one entered character.
14
+ *
15
+ * Проверяет, есть ли хотя бы один введённый символ.
16
+ */
17
+ is(): boolean {
18
+ return this.length.value > 0
19
+ }
20
+
21
+ /**
22
+ * Returns current length.
23
+ *
24
+ * Возвращает текущую длину.
25
+ */
26
+ get(): number {
27
+ return this.length.value
28
+ }
29
+
30
+ /**
31
+ * Sets new length value.
32
+ *
33
+ * Устанавливает новое значение длины.
34
+ * @param length new length value / новое значение длины
35
+ */
36
+ set(length: number): this {
37
+ this.length.value = length
38
+ return this
39
+ }
40
+ }
@@ -0,0 +1,287 @@
1
+ import type { Ref } from 'vue'
2
+ import { isFilled, toArray } from '@dxtmisha/functional'
3
+
4
+ import { MaskType } from './MaskType'
5
+ import { MaskBuffer } from './MaskBuffer'
6
+ import { MaskFocus } from './MaskFocus'
7
+ import { MaskRubberTransition } from './MaskRubberTransition'
8
+ import { MaskDate } from './MaskDate'
9
+ import { MaskSpecial } from './MaskSpecial'
10
+ import { MaskMatch } from './MaskMatch'
11
+ import { MaskRubber } from './MaskRubber'
12
+ import { MaskItem } from './MaskItem'
13
+ import { MaskSelection } from './MaskSelection'
14
+ import { MaskCharacter } from './MaskCharacter'
15
+ import { MaskValueBasic } from './MaskValueBasic'
16
+ import { MaskValue } from './MaskValue'
17
+ import { MaskEmit } from './MaskEmit'
18
+
19
+ import type { MaskElementInput } from './basicTypes'
20
+
21
+ /**
22
+ * Class for working with input behavior (data entering flow)
23
+ *
24
+ * Класс для работы с поведением при вводе данных
25
+ */
26
+ export class MaskData {
27
+ /**
28
+ * Constructor
29
+ * @param type object for working with the mask type/ объект для работы с типом маски
30
+ * @param buffer object for managing cached input data/ объект управления кешированными вводимыми данными
31
+ * @param focus object for handling input field focus/ объект для работы с фокусом поля ввода
32
+ * @param rubberTransition object for managing the transition character/ объект для управления символом перехода
33
+ * @param date object for working with date types/ объект для работы с типом даты
34
+ * @param special object for working with special characters/ объект для работы со специальными символами
35
+ * @param match object for managing the input character match logic/ объект для управления совпадением символов ввода
36
+ * @param rubber object for working with rubber types/ объект для работы с резиновыми типами
37
+ * @param mask object for managing masks/ объект управления маской
38
+ * @param selection object for managing caret position/ объект для управления положением курсора
39
+ * @param character object for managing entered characters/ объект для управления введёнными символами
40
+ * @param valueBasic object for working with base values/ объект для работы с базовыми значениями
41
+ * @param value object for working with transformed value/ объект для работы с преобразованным значением
42
+ * @param emit object for handling callback events/ объект для работы с событиями
43
+ * @param element input element ref/ ссылка на элемент ввода
44
+ */
45
+ constructor(
46
+ protected readonly type: MaskType,
47
+ protected readonly buffer: MaskBuffer,
48
+ protected readonly focus: MaskFocus,
49
+ protected readonly rubberTransition: MaskRubberTransition,
50
+ protected readonly date: MaskDate,
51
+ protected readonly special: MaskSpecial,
52
+ protected readonly match: MaskMatch,
53
+ protected readonly rubber: MaskRubber,
54
+ protected readonly mask: MaskItem,
55
+ protected readonly selection: MaskSelection,
56
+ protected readonly character: MaskCharacter,
57
+ protected readonly valueBasic: MaskValueBasic,
58
+ protected readonly value: MaskValue,
59
+ protected readonly emit: MaskEmit,
60
+ protected readonly element: Ref<MaskElementInput>
61
+ ) {
62
+ }
63
+
64
+ /**
65
+ * Adds new characters entered by user
66
+ *
67
+ * Добавляет новые символы, вводимые пользователем
68
+ * @param selection selected key index/ индекс выделенного ключа
69
+ * @param chars list of characters (string or array)/ список вводимых символов
70
+ * @param focus is element focused/ элемент в фокусе ли
71
+ * @returns was value updated/ было ли обновлено значение
72
+ */
73
+ add(
74
+ selection: number,
75
+ chars: string | string[],
76
+ focus = true
77
+ ): boolean {
78
+ let update = false
79
+
80
+ this.selection.setByMask(selection, focus)
81
+ this.rubberTransition.reset()
82
+
83
+ toArray(chars).forEach((char) => {
84
+ const groupName = this.character.getFocus()
85
+ const immediate = this.character.getImmediate()
86
+
87
+ this.selection.setShift(
88
+ this.rubber.update(this.value.info.value, immediate, char)
89
+ )
90
+
91
+ if (this.rubberTransition.is()) {
92
+ this.selection.setByMask(
93
+ this.mask.getByChar(
94
+ this.rubberTransition.item.value,
95
+ this.selection.getImmediate()
96
+ ) + 1,
97
+ focus
98
+ )
99
+ }
100
+
101
+ if (this.match.is(char, groupName)) {
102
+ this.character.shift()
103
+
104
+ if (
105
+ this.character.getFocus() && (
106
+ this.mask.maxLength.value > this.valueBasic.getLength()
107
+ || this.character.isCharDelete()
108
+ )
109
+ ) {
110
+ this.character.add(char)
111
+ update = true
112
+ }
113
+ }
114
+ })
115
+
116
+ this.goSelection()
117
+ return update
118
+ }
119
+
120
+ /**
121
+ * Removes (deletes) selected input characters
122
+ *
123
+ * Удаляет выделенные символы ввода
124
+ * @param start start selection index/ индекс начала выделения
125
+ * @param end end selection index/ индекс конца выделения
126
+ * @param focus is element focused/ элемент в фокусе ли
127
+ */
128
+ pop(
129
+ start: number,
130
+ end: number = start,
131
+ focus = true
132
+ ): this {
133
+ if (
134
+ start >= 0
135
+ && end <= this.mask.maxLength.value
136
+ ) {
137
+ let quantity = this.mask.getQuantity(start, end)
138
+
139
+ if (focus) {
140
+ this.selection.setByMask(end)
141
+ }
142
+
143
+ while (quantity--) {
144
+ this.rubberTransition.reset()
145
+
146
+ this.character.pop()
147
+ this.character.shift(0)
148
+
149
+ this.selection.setShift(
150
+ this.rubber.pop(this.character.getFocus())
151
+ )
152
+ }
153
+
154
+ this.goSelection()
155
+ }
156
+
157
+ return this
158
+ }
159
+
160
+ /**
161
+ * Resets all values or applies provided value
162
+ *
163
+ * Сбрасывает все значения или применяет переданное
164
+ * @param value new raw value to apply/ новое значение для применения
165
+ */
166
+ reset(value = ''): this {
167
+ this.character.reset()
168
+ this.rubber.reset()
169
+
170
+ if (isFilled(value)) {
171
+ const chars = this.type.isDate() ? this.date.getValue(value) : value
172
+ this.add(0, this.extra(chars.split('')))
173
+ }
174
+
175
+ return this
176
+ }
177
+
178
+ /**
179
+ * Removes redundant characters for paste operation
180
+ *
181
+ * Удаляет лишние символы при вставке
182
+ * @param chars characters to insert/ вставляемые символы
183
+ */
184
+ extra(chars: string[]): string[] {
185
+ if (this.character.is()) {
186
+ return chars
187
+ }
188
+
189
+ const list = this.mask.item.value
190
+ const data: string[] = [...chars]
191
+
192
+ let match = this.match.get(this.mask.info.value?.[0]?.char)
193
+ let key = 0
194
+
195
+ if (match) {
196
+ for (const index in list) {
197
+ const maskChar = list[index]
198
+ if (maskChar) {
199
+ if (this.special.isSpecial(maskChar)) {
200
+ for (let indexChar = key; indexChar < data.length; indexChar++) {
201
+ key++
202
+
203
+ if (data?.[indexChar]?.match(match)) {
204
+ break
205
+ }
206
+ }
207
+
208
+ match = this.match.get(maskChar)
209
+ } else if (maskChar.match(match)) {
210
+ let exit = false
211
+
212
+ for (let indexChar = key; indexChar < data.length; indexChar++) {
213
+ const dataChar = data[indexChar]
214
+
215
+ key++
216
+
217
+ if (dataChar?.match(match)) {
218
+ if (maskChar === dataChar) {
219
+ data.splice(indexChar, 1)
220
+ key--
221
+ } else {
222
+ exit = true
223
+ }
224
+
225
+ break
226
+ }
227
+ }
228
+
229
+ if (exit) {
230
+ break
231
+ }
232
+ }
233
+ }
234
+ }
235
+ }
236
+
237
+ return data
238
+ }
239
+
240
+ /**
241
+ * Restores caret (selection) position
242
+ *
243
+ * Восстанавливает позицию курсора (выделения)
244
+ * @param updateBuffer update from buffer first/ сначала обновить из буфера
245
+ */
246
+ goSelection(updateBuffer = true): this {
247
+ if (this.focus.is()) {
248
+ requestAnimationFrame(() => {
249
+ if (
250
+ this.element.value && (
251
+ !updateBuffer
252
+ || !this.goBuffer()
253
+ )
254
+ ) {
255
+ const length = this.valueBasic.getLength()
256
+ const shift = this.selection.getShift()
257
+ const newSelection = length < shift ? length : shift
258
+
259
+ this.element.value.selectionEnd = newSelection
260
+ this.element.value.selectionStart = newSelection
261
+ }
262
+ })
263
+ }
264
+
265
+ return this
266
+ }
267
+
268
+ /**
269
+ * Processes buffered data if present and emits events
270
+ *
271
+ * Обрабатывает данные из буфера (если есть) и вызывает события
272
+ * @returns was buffer consumed/ был ли использован буфер
273
+ */
274
+ protected goBuffer(): boolean {
275
+ if (this.buffer.is()) {
276
+ this.add(this.selection.getShift(), this.buffer.get())
277
+ this.buffer.resetChars()
278
+
279
+ return true
280
+ }
281
+
282
+ this.buffer.reset()
283
+ this.emit.go()
284
+
285
+ return false
286
+ }
287
+ }
@@ -0,0 +1,157 @@
1
+ import { computed } from 'vue'
2
+ import { Datetime } from '@dxtmisha/functional'
3
+
4
+ import { MaskType } from './MaskType'
5
+
6
+ import type { FieldMasks, FieldPatternElement, FieldPatternList } from '../../types/fieldTypes'
7
+ import type { MaskProps } from './props'
8
+
9
+ const PATTERN_FOR_DATE: FieldPatternList = {
10
+ Y: '[0-9]{4}',
11
+ M: {
12
+ type: 'number',
13
+ min: '1',
14
+ max: '12'
15
+ },
16
+ D: (item: FieldMasks): FieldPatternElement => {
17
+ const date = new Datetime(`${item?.Y?.value ?? '2000'}-${item?.M?.value ?? '01'}-01`)
18
+
19
+ return {
20
+ type: 'number',
21
+ min: '1',
22
+ max: date.getMaxDay().toString()
23
+ }
24
+ },
25
+ h: {
26
+ type: 'number',
27
+ min: '0',
28
+ max: '23'
29
+ },
30
+ m: {
31
+ type: 'number',
32
+ min: '0',
33
+ max: '59'
34
+ },
35
+ s: {
36
+ type: 'number',
37
+ min: '0',
38
+ max: '59'
39
+ }
40
+ }
41
+ const VIEW_LIST: Record<string, string> = {
42
+ Y: 'y',
43
+ M: 'm',
44
+ D: 'd',
45
+ h: 'h',
46
+ m: 'm',
47
+ s: 's'
48
+ }
49
+
50
+ /**
51
+ * Class for working with date/time masks (date, datetime, time etc.).
52
+ *
53
+ * Класс для работы с масками даты/времени (date, datetime, time и т.п.).
54
+ */
55
+ export class MaskDate {
56
+ /**
57
+ * Constructor
58
+ * @param props input data/ входные данные
59
+ * @param type mask type helper/ объект помощник типа маски
60
+ */
61
+ constructor(
62
+ protected readonly props: MaskProps,
63
+ protected readonly type: MaskType
64
+ ) {
65
+ }
66
+
67
+ /** Mask template for current date type / Шаблон маски для текущего типа даты */
68
+ readonly mask = computed<string[]>(() => {
69
+ return this.getDatetime()
70
+ .setHour24(true)
71
+ .locale(undefined, '2-digit')
72
+ .replace('1987', 'YYYY')
73
+ .replace('12', 'MM')
74
+ .replace('18', 'DD')
75
+ .replace('10', 'hh')
76
+ .replace('20', 'mm')
77
+ .replace('30', 'ss')
78
+ .split('')
79
+ })
80
+
81
+ /**
82
+ * Returns base Datetime helper for given value (or default stub).
83
+ *
84
+ * Возвращает базовый помощник Datetime для значения (или дефолтный шаблон).
85
+ * @param date filled date string/ заполненная строка даты
86
+ */
87
+ getDatetime(date?: string): Datetime {
88
+ return new Datetime(date ?? '1987-12-18T10:20:30', this.type.getByDate(), this.props.language)
89
+ }
90
+
91
+ /**
92
+ * Returns localized formatted date/time value.
93
+ *
94
+ * Возвращает локализованное форматированное значение даты/времени.
95
+ * @param date filled date string/ заполненная строка даты
96
+ */
97
+ getValue(date?: string): string {
98
+ return this.getDatetime(date).locale(undefined, '2-digit')
99
+ }
100
+
101
+ /**
102
+ * Returns standardized (ISO-like) date/time value or empty if invalid.
103
+ *
104
+ * Возвращает стандартизированное (похоже на ISO) значение или пустую строку при невалидности.
105
+ * @param date masks data grouped by parts/ данные масок, сгруппированные по частям
106
+ */
107
+ getValueStandard(date: FieldMasks): string {
108
+ const value = this.getValueStandardFull(date)
109
+ return value === '' ? '' : this.getDatetime(value).standard(false)
110
+ }
111
+
112
+ /**
113
+ * Returns full raw date/time string assembled from groups (or empty if invalid).
114
+ *
115
+ * Возвращает полную «сырую» строку даты/времени, собранную из групп (или пусто если невалидно).
116
+ * @param date masks data grouped by parts/ данные масок, сгруппированные по частям
117
+ */
118
+ getValueStandardFull(date: FieldMasks): string {
119
+ const value = `${date?.Y?.value || '2000'}`
120
+ + `-${date?.M?.value || '01'}`
121
+ + `-${date?.D?.value || '01'}`
122
+ + `T${date?.h?.value || '00'}`
123
+ + `:${date?.m?.value || '00'}`
124
+ + `:${date?.s?.value || '00'}`
125
+
126
+ return isNaN(Date.parse(value)) ? '' : value
127
+ }
128
+
129
+ /**
130
+ * Returns validation patterns object for date/time parts.
131
+ *
132
+ * Возвращает объект паттернов валидации для частей даты/времени.
133
+ */
134
+ getPattern(): FieldPatternList {
135
+ return PATTERN_FOR_DATE
136
+ }
137
+
138
+ /** Returns list of date-only group symbols/ Возвращает список символов для даты */
139
+ getSpecialDate(): string[] {
140
+ return ['Y', 'M', 'D']
141
+ }
142
+
143
+ /** Returns list of full date-time group symbols/ Возвращает список символов для даты и времени */
144
+ getSpecialFull(): string[] {
145
+ return [...this.getSpecialDate(), 'h', 'm', 's']
146
+ }
147
+
148
+ /**
149
+ * Returns display symbol for group.
150
+ *
151
+ * Возвращает отображаемый символ для группы.
152
+ * @param groupName group name/ название группы
153
+ */
154
+ getView(groupName: string): string | undefined {
155
+ return VIEW_LIST?.[groupName]
156
+ }
157
+ }