@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,179 @@
1
+ import { computed } from 'vue'
2
+ import { forEach, isArray, isObject, isObjectNotArray } from '@dxtmisha/functional'
3
+
4
+ import { MaskType } from './MaskType'
5
+ import { MaskDate } from './MaskDate'
6
+ import { MaskFormat } from './MaskFormat'
7
+
8
+ import type { FieldPatternItemOrFunction } from '../../types/fieldTypes'
9
+ import type {
10
+ MaskMatchItem,
11
+ MaskSpecialItem,
12
+ MaskSpecialList,
13
+ MaskSpecialProp
14
+ } from './basicTypes'
15
+ import type { MaskProps } from './props'
16
+
17
+ /**
18
+ * Class for working with groups defined by special symbols.
19
+ *
20
+ * Класс для работы с группами, определёнными специальными символами.
21
+ */
22
+ export class MaskSpecial {
23
+ /**
24
+ * Constructor
25
+ * @param props input data/ входные данные
26
+ * @param type mask type helper/ объект помощник типа маски
27
+ * @param date date mask helper/ объект помощник маски даты
28
+ * @param format numeric/currency mask helper/ объект помощник числовых масок
29
+ */
30
+ constructor(
31
+ protected readonly props: MaskProps,
32
+ protected readonly type: MaskType,
33
+ protected readonly date: MaskDate,
34
+ protected readonly format: MaskFormat
35
+ ) {
36
+ }
37
+
38
+ /**
39
+ * Returns list of special symbols.
40
+ *
41
+ * Возвращает список специальных символов.
42
+ */
43
+ readonly item = computed<string[]>(() => {
44
+ if (this.type.isCurrencyOrNumber()) {
45
+ return this.format.getSpecial()
46
+ }
47
+
48
+ if (this.type.isTime()) {
49
+ return this.date.getSpecialFull()
50
+ }
51
+
52
+ if (this.type.isDate()) {
53
+ return this.date.getSpecialDate()
54
+ }
55
+
56
+ const special = this.special.value
57
+
58
+ if (isArray(special)) {
59
+ return special
60
+ }
61
+
62
+ if (isObject(special)) {
63
+ return Object.keys(special)
64
+ }
65
+
66
+ return [special]
67
+ })
68
+
69
+ /**
70
+ * Returns map of only rubber-enabled groups.
71
+ *
72
+ * Возвращает карту только резиновых групп.
73
+ */
74
+ readonly rubberList = computed<MaskSpecialList>(() => {
75
+ const data: MaskSpecialList = {}
76
+
77
+ if (isObjectNotArray(this.special.value)) {
78
+ forEach(this.special.value, (item, index) => {
79
+ if (item?.rubber) {
80
+ data[index] = item
81
+ }
82
+ })
83
+ }
84
+
85
+ return data
86
+ })
87
+
88
+ /**
89
+ * Checks if symbol is special.
90
+ *
91
+ * Проверяет, является ли символ специальным.
92
+ * @param char symbol to check/ символ для проверки
93
+ */
94
+ isSpecial(char: string): boolean {
95
+ return this.item.value.indexOf(char) !== -1
96
+ }
97
+
98
+ /**
99
+ * Checks if group has default value.
100
+ *
101
+ * Проверяет, имеет ли группа значение по умолчанию.
102
+ * @param groupName group name/ название группы
103
+ */
104
+ isDefault(groupName: string): boolean {
105
+ return Boolean(this.getDefault(groupName))
106
+ }
107
+
108
+ /**
109
+ * Returns default value for group.
110
+ *
111
+ * Возвращает значение по умолчанию для группы.
112
+ * @param groupName group name/ название группы
113
+ */
114
+ getDefault(groupName: string): MaskMatchItem | undefined {
115
+ return this.getSpecialItem(groupName)?.defaultValue
116
+ }
117
+
118
+ /**
119
+ * Returns matcher (regexp/string) for group.
120
+ *
121
+ * Возвращает выражение для проверки группы.
122
+ * @param groupName group name/ название группы
123
+ */
124
+ getMatch(groupName: string): MaskMatchItem | undefined {
125
+ return this.getSpecialItem(groupName)?.match
126
+ }
127
+
128
+ /**
129
+ * Returns pattern definition for group.
130
+ *
131
+ * Возвращает pattern для группы.
132
+ * @param groupName group name/ название группы
133
+ */
134
+ getPattern(groupName: string): FieldPatternItemOrFunction | undefined {
135
+ return this.getSpecialItem(groupName)?.pattern
136
+ }
137
+
138
+ /**
139
+ * Returns view (display character) for group.
140
+ *
141
+ * Возвращает отображаемый символ для группы.
142
+ * @param groupName group name/ название группы
143
+ */
144
+ getView(groupName: string): string | undefined {
145
+ return this.getSpecialItem(groupName)?.view
146
+ }
147
+
148
+ /**
149
+ * Returns special property (original definition).
150
+ *
151
+ * Возвращает свойство special (оригинальное определение).
152
+ */
153
+ protected readonly special = computed<MaskSpecialProp>(() => {
154
+ if (this.type.isCurrencyOrNumber()) {
155
+ return this.format.special
156
+ }
157
+
158
+ return this.props.special ?? '*'
159
+ })
160
+
161
+ /**
162
+ * Returns special group item data by name.
163
+ *
164
+ * Возвращает данные группы special по имени.
165
+ * @param groupName group name/ название группы
166
+ */
167
+ protected getSpecialItem(groupName: string): MaskSpecialItem | undefined {
168
+ const special = this.special.value
169
+
170
+ if (
171
+ isObjectNotArray(special)
172
+ && groupName in special
173
+ ) {
174
+ return special[groupName]
175
+ }
176
+
177
+ return undefined
178
+ }
179
+ }
@@ -0,0 +1,103 @@
1
+ import { computed } from 'vue'
2
+ import type { GeoDate } from '@dxtmisha/functional'
3
+
4
+ import type { MaskTypeItem } from './basicTypes'
5
+ import type { MaskProps } from './props'
6
+
7
+ /**
8
+ * Class for defining the mask type.
9
+ *
10
+ * Класс для определения типа маски.
11
+ */
12
+ export class MaskType {
13
+ /**
14
+ * Constructor
15
+ * @param props input data/ входные данные
16
+ */
17
+ constructor(
18
+ protected readonly props: MaskProps
19
+ ) {
20
+ }
21
+
22
+ /** Current mask type (default: text)/ Текущий тип маски (по умолчанию: text) */
23
+ readonly item = computed<MaskTypeItem>(() => this.props.type ?? 'text')
24
+
25
+ /**
26
+ * Is the mask simple number type.
27
+ *
28
+ * Является ли маска простым числовым типом (number).
29
+ */
30
+ isNumber(): boolean {
31
+ return this.item.value === 'number'
32
+ }
33
+
34
+ /**
35
+ * Is the mask formatted number type (number-format).
36
+ *
37
+ * Является ли маска типом форматированного числа (number-format).
38
+ */
39
+ isNumberFormat(): boolean {
40
+ return this.item.value === 'number-format'
41
+ }
42
+
43
+ /**
44
+ * Is the mask currency type.
45
+ *
46
+ * Является ли маска валютным типом (currency).
47
+ */
48
+ isCurrency(): boolean {
49
+ return this.item.value === 'currency'
50
+ }
51
+
52
+ /**
53
+ * Is the mask one of numeric related types (number | number-format | currency).
54
+ *
55
+ * Является ли маска одним из числовых типов (number | number-format | currency).
56
+ */
57
+ isCurrencyOrNumber(): boolean {
58
+ return this.isNumber() || this.isNumberFormat() || this.isCurrency()
59
+ }
60
+
61
+ /**
62
+ * Is the mask one of the time input types.
63
+ *
64
+ * Является ли маска одним из типов для ввода времени.
65
+ */
66
+ isTime(): boolean {
67
+ return [
68
+ 'full',
69
+ 'datetime',
70
+ 'time',
71
+ 'hour-minute',
72
+ 'hour',
73
+ 'minute',
74
+ 'second'
75
+ ].indexOf(this.item.value) !== -1
76
+ }
77
+
78
+ /**
79
+ * Is the mask one of the date (or time) input types.
80
+ *
81
+ * Является ли маска одним из типов для ввода даты (или времени).
82
+ */
83
+ isDate(): boolean {
84
+ return this.isTime()
85
+ || [
86
+ 'date',
87
+ 'year',
88
+ 'year-month',
89
+ 'month',
90
+ 'day',
91
+ 'day-month'
92
+ ].indexOf(this.item.value) !== -1
93
+ }
94
+
95
+ /**
96
+ * Returns GeoDate-compatible mask type (fallback: date).
97
+ *
98
+ * Возвращает тип маски совместимый с GeoDate (если нет — date).
99
+ */
100
+ getByDate(): GeoDate {
101
+ return this.isDate() ? (this.item.value as GeoDate) : 'date'
102
+ }
103
+ }
@@ -0,0 +1,102 @@
1
+ import { computed } from 'vue'
2
+
3
+ import { FieldInputCheckInclude } from '../../classes/field/FieldInputCheckInclude'
4
+ import { MaskPattern } from './MaskPattern'
5
+ import { MaskValue } from './MaskValue'
6
+
7
+ import type { FieldValidationItem } from '../../types/fieldTypes'
8
+
9
+ /**
10
+ * Class for working with the validity of entered data.
11
+ *
12
+ * Класс для работы с валидностью введённых данных.
13
+ */
14
+ export class MaskValidation {
15
+ /**
16
+ * Constructor
17
+ * @param pattern object for working with input data validation/ объект для работы с проверкой введённых данных
18
+ * @param value object for working with entered data/ объект для работы с введёнными данными
19
+ */
20
+ constructor(
21
+ protected readonly pattern: MaskPattern,
22
+ protected readonly value: MaskValue
23
+ ) {
24
+ }
25
+
26
+ /** Validation error info or undefined/ Информация об ошибке или undefined */
27
+ readonly item = computed(() => {
28
+ for (const input of Object.values(this.pattern.item.value)) {
29
+ const item = this.value.getInfoItem(input.group)
30
+
31
+ if (item && item.full) {
32
+ const check = input.check(item.value)
33
+
34
+ if (check && !check.status) {
35
+ return {
36
+ ...check,
37
+ value: this.value.item.value
38
+ }
39
+ }
40
+ }
41
+ }
42
+
43
+ return this.getValidationCheck()
44
+ })
45
+
46
+ /**
47
+ * Checks if the current group has an error.
48
+ *
49
+ * Проверяет, есть ли ошибка у текущей группы.
50
+ * @param groupName group name/ название группы
51
+ */
52
+ isError(groupName: string): boolean {
53
+ const groupError = this.item.value?.group
54
+
55
+ return Boolean(
56
+ groupError && (
57
+ groupError === groupName
58
+ || groupError === FieldInputCheckInclude.getGroupDefault()
59
+ )
60
+ )
61
+ }
62
+
63
+ /**
64
+ * Checks the correctness of filling in the values.
65
+ *
66
+ * Проверяет корректность заполнения значений.
67
+ */
68
+ checkValidity(): boolean {
69
+ return this.item.value === undefined
70
+ }
71
+
72
+ /**
73
+ * Getting global check data.
74
+ *
75
+ * Получение данных глобальной проверки.
76
+ */
77
+ protected getValidationCheck(): FieldValidationItem {
78
+ if (this.value.isFull.value) {
79
+ const item = this.value.getForCheck()
80
+
81
+ if (this.pattern.isCheck()) {
82
+ const check = this.pattern.getInput(item.group)?.check(item.value)
83
+
84
+ if (check && !check.status) {
85
+ return check
86
+ }
87
+ }
88
+
89
+ return {
90
+ status: true,
91
+ value: item.value,
92
+ isFull: true
93
+ }
94
+ }
95
+
96
+ return {
97
+ status: true,
98
+ value: this.value.item.value,
99
+ isFull: false
100
+ }
101
+ }
102
+ }
@@ -0,0 +1,225 @@
1
+ import { computed, watch } from 'vue'
2
+
3
+ import { FieldInputCheckInclude } from '../../classes/field/FieldInputCheckInclude'
4
+ import { MaskType } from './MaskType'
5
+ import { MaskDate } from './MaskDate'
6
+ import { MaskFormat } from './MaskFormat'
7
+ import { MaskItem } from './MaskItem'
8
+ import { MaskSpecial } from './MaskSpecial'
9
+ import { MaskValueBasic } from './MaskValueBasic'
10
+
11
+ import type { FieldMaskItem, FieldMasks } from '../../types/fieldTypes'
12
+ import { MASK_CHAR_DELETE } from './basicTypes'
13
+ import type { MaskProps } from './props'
14
+
15
+ /**
16
+ * Class for transforming the entered data into the final result.
17
+ *
18
+ * Класс для преобразования введенных данных в конечный результат.
19
+ */
20
+ export class MaskValue {
21
+ protected infoCache?: FieldMasks
22
+
23
+ /**
24
+ * Constructor
25
+ * @param props input data/ входные данные
26
+ * @param type object for working with the mask type/ объект для работы с типом маски
27
+ * @param date object for working with date types/ объект для работы с типом даты
28
+ * @param format object for managing numeric mask types/ объект для управления числовыми типами масок
29
+ * @param mask object for managing masks/ объект управления маской
30
+ * @param special object for working with special characters/ объект для работы со специальными символами
31
+ * @param valueBasic object for working with base values/ объект для работы с базовыми значениями
32
+ */
33
+ constructor(
34
+ protected readonly props: MaskProps,
35
+ protected readonly type: MaskType,
36
+ protected readonly date: MaskDate,
37
+ protected readonly format: MaskFormat,
38
+ protected readonly mask: MaskItem,
39
+ protected readonly special: MaskSpecial,
40
+ protected readonly valueBasic: MaskValueBasic
41
+ ) {
42
+ watch(this.info, (_, old) => {
43
+ if (this.type.isDate()) {
44
+ this.infoCache = old
45
+ }
46
+ })
47
+ }
48
+
49
+ /**
50
+ * Receiving a list with information about standard values/
51
+ * Получение списка с информацией о стандартных значениях
52
+ */
53
+ readonly info = computed<FieldMasks>(() => {
54
+ const standard = this.valueBasic.item.value
55
+ const data: FieldMasks = {}
56
+
57
+ this.mask.item.value.forEach((char, index) => {
58
+ if (this.special.isSpecial(char)) {
59
+ const value = this.add(data, char)
60
+
61
+ if (
62
+ this.isStandard(index)
63
+ && standard[index] !== MASK_CHAR_DELETE
64
+ ) {
65
+ value.chars.push(String(standard[index]))
66
+ }
67
+
68
+ value.maxLength++
69
+ value.end = value.maxLength === value.chars.length
70
+ value.full = this.special.isDefault(char) || value.end
71
+ value.value = value.full ? value.chars.join('') : ''
72
+ }
73
+ })
74
+
75
+ return data
76
+ })
77
+
78
+ /** Final value (shortcut)/ Финальное значение (ярлык) */
79
+ readonly item = computed(() => this.getValue(this.info.value))
80
+
81
+ /** Checks if the mask is fully filled/ Проверяет, полностью ли заполнена маска */
82
+ readonly isFull = computed<boolean>(() => {
83
+ for (const item of Object.values(this.info.value)) {
84
+ if (!item.full) {
85
+ return false
86
+ }
87
+ }
88
+
89
+ return true
90
+ })
91
+
92
+ /** Checks if the mask is fully filled by length/ Проверяет, полностью ли заполнена маска по длине */
93
+ readonly isEnd = computed<boolean>(() => {
94
+ for (const item of Object.values(this.info.value)) {
95
+ if (!item.end) {
96
+ return false
97
+ }
98
+ }
99
+
100
+ return true
101
+ })
102
+
103
+ /**
104
+ * Returns old values.
105
+ *
106
+ * Возвращает старые значения.
107
+ */
108
+ getValueCache(): string {
109
+ if (this.infoCache) {
110
+ return this.getValue(this.infoCache)
111
+ }
112
+
113
+ return this.item.value
114
+ }
115
+
116
+ /**
117
+ * Getting full information for global verification.
118
+ *
119
+ * Получение полной информации для глобальной проверки.
120
+ */
121
+ getForCheck(): FieldMaskItem {
122
+ const value = this.item.value
123
+
124
+ return {
125
+ group: FieldInputCheckInclude.getGroupDefault(),
126
+ value,
127
+ maxLength: value.length,
128
+ full: this.isFull.value,
129
+ end: this.isEnd.value,
130
+ chars: value.split('')
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Getting information for a specific group.
136
+ *
137
+ * Получение информации для конкретной группы.
138
+ * @param groupName group name/ название группы
139
+ */
140
+ getInfoItem(groupName: string): FieldMaskItem | undefined {
141
+ return this.info.value?.[groupName]
142
+ }
143
+
144
+ /** Returns the final form of the value/ Возвращает финальный вид значения */
145
+ protected readonly valueFinal = computed(() => {
146
+ const basic = this.valueBasic.item.value.split('')
147
+ const mask = this.mask.item.value
148
+ let data: string = ''
149
+
150
+ for (const index in mask) {
151
+ if (index in basic) {
152
+ data += basic[index]
153
+ } else if (mask[index]) {
154
+ const defaultValue = this.special.getDefault(mask[index])
155
+
156
+ if (defaultValue) {
157
+ data += defaultValue
158
+ }
159
+ }
160
+ }
161
+
162
+ return data
163
+ })
164
+
165
+ /**
166
+ * Checks if there is a value by the key number in the basic values.
167
+ *
168
+ * Проверяет, есть ли значение по номеру ключа в базовых значениях.
169
+ * @param index key number/ номер ключа
170
+ */
171
+ protected isStandard(index: number): boolean {
172
+ return Boolean(this.valueBasic.getChar(index))
173
+ }
174
+
175
+ /**
176
+ * Returns values based on the specified data information structure.
177
+ *
178
+ * Возвращает значения по указанной структуре информации о данных.
179
+ * @param info data information/ информация о данных
180
+ */
181
+ protected getValue(info: FieldMasks) {
182
+ if (this.type.isCurrencyOrNumber()) {
183
+ return this.format.getValueStandard(info)
184
+ }
185
+
186
+ if (this.type.isDate()) {
187
+ if (this.isFull.value) {
188
+ return this.date.getValueStandard(info)
189
+ }
190
+
191
+ return ''
192
+ }
193
+
194
+ if (
195
+ this.props.fullOnly
196
+ && !this.isFull.value
197
+ ) {
198
+ return ''
199
+ }
200
+
201
+ return this.valueFinal.value
202
+ }
203
+
204
+ /**
205
+ * Adding a new character to the list divided by groups if it is not there and returning the property of the given group.
206
+ *
207
+ * Добавление нового символа в список, разделенный по группам, если его там нет, и возвращение свойства данной группы.
208
+ * @param data data for verification/ данные для проверки
209
+ * @param groupName group name/ название группы
210
+ */
211
+ protected add(data: FieldMasks, groupName: string): FieldMaskItem {
212
+ if (!(groupName in data)) {
213
+ data[groupName] = {
214
+ group: groupName,
215
+ value: '',
216
+ maxLength: 0,
217
+ full: false,
218
+ end: false,
219
+ chars: []
220
+ }
221
+ }
222
+
223
+ return data[groupName] as FieldMaskItem
224
+ }
225
+ }
@@ -0,0 +1,87 @@
1
+ import { computed } from 'vue'
2
+
3
+ import { MaskRubberTransition } from './MaskRubberTransition'
4
+ import { MaskItem } from './MaskItem'
5
+ import { MaskSpecial } from './MaskSpecial'
6
+ import { MaskCharacter } from './MaskCharacter'
7
+
8
+ /**
9
+ * Class for getting basic input values.
10
+ *
11
+ * Класс для получения базовых вводимых значений.
12
+ */
13
+ export class MaskValueBasic {
14
+ /**
15
+ * Constructor
16
+ * @param rubberTransition object for managing the transition character/ объект для управления символом перехода
17
+ * @param mask object for managing masks/ объект управления маской
18
+ * @param special object for working with special characters/ объект для работы со специальными символами
19
+ * @param character object for managing entered character/ объект для управления введённым символом
20
+ */
21
+ constructor(
22
+ protected readonly rubberTransition: MaskRubberTransition,
23
+ protected readonly mask: MaskItem,
24
+ protected readonly special: MaskSpecial,
25
+ protected readonly character: MaskCharacter
26
+ ) {
27
+ }
28
+
29
+ /**
30
+ * Receiving basic standard values.
31
+ *
32
+ * Получение базовых стандартных значений.
33
+ */
34
+ readonly item = computed(() => {
35
+ const character = this.character.item.value
36
+ const value: string[] = []
37
+ let key = 0 as number
38
+
39
+ for (const char of this.mask.item.value) {
40
+ if (!this.special.isSpecial(char)) {
41
+ value.push(char)
42
+ } else if (key in character) {
43
+ value.push(String(character[key++]))
44
+
45
+ if (
46
+ key > character.length
47
+ && this.rubberTransition.is()
48
+ && !this.rubberTransition.isChar(char)
49
+ ) {
50
+ break
51
+ }
52
+ } else {
53
+ break
54
+ }
55
+ }
56
+
57
+ return value.join('')
58
+ })
59
+
60
+ /**
61
+ * Checks if the values are filled in.
62
+ *
63
+ * Проверяет, заполнены ли значения.
64
+ */
65
+ is(): boolean {
66
+ return this.getLength() > 0
67
+ }
68
+
69
+ /**
70
+ * Getting the character from the basic standard values by its key number.
71
+ *
72
+ * Получение символа из базовых стандартных значений по его номеру ключа.
73
+ * @param index key number/ номер ключа
74
+ */
75
+ getChar(index: number): string | undefined {
76
+ return this.item.value?.[index]
77
+ }
78
+
79
+ /**
80
+ * Getting the length of basic standard values.
81
+ *
82
+ * Получение длины базовых стандартных значений.
83
+ */
84
+ getLength(): number {
85
+ return this.item.value.length
86
+ }
87
+ }