@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,43 @@
1
+ import { MaskType } from './MaskType'
2
+
3
+ import { type MaskProps } from './props'
4
+
5
+ /**
6
+ * Class for handling alignment of masked value (direction & numeric rules).
7
+ *
8
+ * Класс для управления выравниванием маски (направление и числовые правила).
9
+ */
10
+ export class MaskRight {
11
+ /**
12
+ * Constructor
13
+ * @param props input data/ входные данные
14
+ * @param type mask type helper/ объект помощник типа маски
15
+ */
16
+ constructor(
17
+ protected readonly props: MaskProps,
18
+ protected readonly type: MaskType
19
+ ) {
20
+ }
21
+
22
+ /**
23
+ * Returns whether the content should visually end-align (numeric, rtl, currency).
24
+ *
25
+ * Возвращает, нужно ли визуально выравнивать по концу (числа, rtl, валюта).
26
+ */
27
+ isEnd(): boolean {
28
+ return this.props.align !== 'left' && (
29
+ this.props.dir === 'rtl'
30
+ || (this.type.isCurrency() && !this.props.currencyHide)
31
+ || this.type.isNumberFormat()
32
+ )
33
+ }
34
+
35
+ /**
36
+ * Checks if alignment is right (explicit right or end alignment).
37
+ *
38
+ * Проверяет, что выравнивание справа (явно right или конечное).
39
+ */
40
+ isRight(): boolean {
41
+ return this.props.align === 'right' || this.isEnd()
42
+ }
43
+ }
@@ -0,0 +1,156 @@
1
+ import { computed } from 'vue'
2
+ import { getColumn, isArray, isSelected, isString, replaceRecursive } from '@dxtmisha/functional'
3
+
4
+ import { MaskType } from './MaskType'
5
+ import { MaskRubberItem } from './MaskRubberItem'
6
+ import { MaskRubberTransition } from './MaskRubberTransition'
7
+
8
+ import { MaskSpecial } from './MaskSpecial'
9
+ import { MaskMatch } from './MaskMatch'
10
+ import { MaskFormat } from './MaskFormat'
11
+
12
+ import type { FieldMasks } from '../../types/fieldTypes'
13
+ import type {
14
+ MaskSpecialItem,
15
+ MaskSpecialList
16
+ } from './basicTypes'
17
+ import type { MaskProps } from './props'
18
+
19
+ /**
20
+ * Class for working with the rubber type.
21
+ *
22
+ * Класс для работы с резиновым типом.
23
+ */
24
+ export class MaskRubber {
25
+ /**
26
+ * Constructor
27
+ * @param props base data/ базовые данные
28
+ * @param type object for working with the mask type/ объект для работы с типом маски
29
+ * @param rubberItem object for working with rubber elements/ объект для работы с резиновыми элементами
30
+ * @param rubberTransition object for managing the transition character/ объект для управления символом перехода
31
+ * @param special object for working with special characters/ объект для работы со специальными символами
32
+ * @param match object for managing the input character/ объект для управления символом ввода
33
+ * @param format object for managing numeric mask types/ объект для управления числовыми типами масок
34
+ */
35
+ constructor(
36
+ protected readonly props: MaskProps,
37
+ protected readonly type: MaskType,
38
+ protected readonly rubberItem: MaskRubberItem,
39
+ protected readonly rubberTransition: MaskRubberTransition,
40
+ protected readonly special: MaskSpecial,
41
+ protected readonly match: MaskMatch,
42
+ protected readonly format: MaskFormat
43
+ ) {
44
+ }
45
+
46
+ /**
47
+ * Checks if the symbol is a transition.
48
+ *
49
+ * Проверяет, является ли символ перехода.
50
+ * @param char checkable symbol/ проверяемый символ
51
+ */
52
+ isTransition(char: string): boolean {
53
+ return this.transition.value.indexOf(char) >= 0
54
+ }
55
+
56
+ /**
57
+ * Getting properties for the rubber group.
58
+ *
59
+ * Получение свойства для резиновой группы.
60
+ * @param groupName group name/ название группы
61
+ */
62
+ get(groupName: string): MaskSpecialItem | undefined {
63
+ return this.list.value?.[groupName]
64
+ }
65
+
66
+ /**
67
+ * Updates the group of rubber symbols if all conditions are met and returns true.
68
+ *
69
+ * Обновляет группу резиновых символов, если все условия подходят, и возвращает true.
70
+ * @param data values for verification/ значения для проверки
71
+ * @param groupName group name/ название группы
72
+ * @param char symbol for checking/ символ для проверки
73
+ */
74
+ update(
75
+ data: FieldMasks,
76
+ groupName: string,
77
+ char: string
78
+ ): boolean {
79
+ const item = this.get(groupName)
80
+ const value = data?.[groupName]
81
+
82
+ if (item && value) {
83
+ if (
84
+ isSelected(char, item?.transitionChar) || (
85
+ item?.maxLength
86
+ && item?.maxLength <= value?.chars.length
87
+ )
88
+ ) {
89
+ this.rubberTransition.set(groupName)
90
+ return false
91
+ }
92
+
93
+ if (
94
+ value.end
95
+ && this.match.is(char, groupName)
96
+ && !this.rubberTransition.isChar(groupName)
97
+ ) {
98
+ this.rubberItem.add(groupName)
99
+ this.rubberTransition.reset()
100
+ }
101
+
102
+ return true
103
+ }
104
+
105
+ return false
106
+ }
107
+
108
+ /**
109
+ * Reduces the length of the entered symbol by its group.
110
+ *
111
+ * Уменьшает длину вводимого символа по его группе.
112
+ * @param groupName group name/ название группы
113
+ */
114
+ pop(groupName: string): boolean {
115
+ return this.rubberItem.pop(groupName)
116
+ }
117
+
118
+ /**
119
+ * Resets all states of all groups to the initial one.
120
+ *
121
+ * Сбрасывает все состояния всех групп до начального.
122
+ */
123
+ reset(): this {
124
+ this.rubberItem.reset()
125
+ this.rubberTransition.reset()
126
+
127
+ return this
128
+ }
129
+
130
+ /** List of rubber groups/ Список резиновых групп */
131
+ protected readonly list = computed<MaskSpecialList>(() => {
132
+ const special = this.special.rubberList.value
133
+
134
+ if (this.type.isCurrencyOrNumber()) {
135
+ return replaceRecursive(
136
+ this.format.rubber.value,
137
+ special
138
+ )
139
+ }
140
+
141
+ return special
142
+ })
143
+
144
+ /** List of transition symbols/ Список символов перехода */
145
+ protected readonly transition = computed<string[]>(() => {
146
+ return getColumn(
147
+ Object.values(this.list.value).filter(
148
+ item => 'transitionChar' in item && (
149
+ isString(item.transitionChar)
150
+ || isArray(item.transitionChar)
151
+ )
152
+ ),
153
+ 'transitionChar'
154
+ ).flat() as string[]
155
+ })
156
+ }
@@ -0,0 +1,96 @@
1
+ import { ref } from 'vue'
2
+ import { forEach, getExp, strFill } from '@dxtmisha/functional'
3
+
4
+ /**
5
+ * Class for storing counts of entered characters for elastic ("rubber") groups.
6
+ *
7
+ * Класс для хранения количества введённых символов для «резиновых» групп.
8
+ */
9
+ export class MaskRubberItem {
10
+ /** Map: group name -> entered length/ Карта: имя группы -> введённая длина */
11
+ protected readonly item = ref<Record<string, number>>({})
12
+
13
+ /**
14
+ * Checks whether group has a non‑zero stored length.
15
+ *
16
+ * Проверяет, есть ли у группы ненулевая длина.
17
+ * @param groupName group name / название группы
18
+ */
19
+ is(groupName: string): boolean {
20
+ return Number(this.item.value?.[groupName]) > 0
21
+ }
22
+
23
+ /**
24
+ * Returns stored length for group (0 if none).
25
+ *
26
+ * Возвращает сохранённую длину группы (0 если нет).
27
+ * @param groupName group name / название группы
28
+ */
29
+ getByIndex(groupName: string): number {
30
+ return this.item.value?.[groupName] ?? 0
31
+ }
32
+
33
+ /**
34
+ * Increments stored length for group by 1.
35
+ *
36
+ * Увеличивает сохранённую длину группы на 1.
37
+ * @param groupName group name / название группы
38
+ */
39
+ add(groupName: string): this {
40
+ this.item.value = {
41
+ ...this.item.value,
42
+ [groupName]: this.getByIndex(groupName) + 1
43
+ }
44
+
45
+ return this
46
+ }
47
+
48
+ /**
49
+ * Decreases stored length for group by 1 (if > 0).
50
+ *
51
+ * Уменьшает сохранённую длину группы на 1 (если > 0).
52
+ * @param groupName group name / название группы
53
+ * @returns true if decreased / true если уменьшено
54
+ */
55
+ pop(groupName: string): boolean {
56
+ if (this.is(groupName)) {
57
+ this.item.value = {
58
+ ...this.item.value,
59
+ [groupName]: this.getByIndex(groupName) - 1
60
+ }
61
+
62
+ return true
63
+ }
64
+
65
+ return false
66
+ }
67
+
68
+ /**
69
+ * Resets all stored lengths.
70
+ *
71
+ * Сбрасывает все сохранённые длины.
72
+ */
73
+ reset(): this {
74
+ this.item.value = {}
75
+ return this
76
+ }
77
+
78
+ /**
79
+ * Expands mask by duplicating matched group placeholders according to stored lengths.
80
+ *
81
+ * Расширяет маску, дублируя плейсхолдеры групп по сохранённым длинам.
82
+ * @param mask original mask / исходная маска
83
+ */
84
+ expandMask(mask: string): string {
85
+ let value = mask
86
+
87
+ forEach(this.item.value, (length, index) => {
88
+ value = value.replace(
89
+ getExp(index, 'g', '([:value]+)'),
90
+ (all: string) => `${all}${strFill(index, length)}`
91
+ )
92
+ })
93
+
94
+ return value
95
+ }
96
+ }
@@ -0,0 +1,50 @@
1
+ import { ref } from 'vue'
2
+
3
+ /**
4
+ * Class for storing and working with the transition symbol for the active group.
5
+ *
6
+ * Класс для хранения и работы с символом перехода для активной группы.
7
+ */
8
+ export class MaskRubberTransition {
9
+ /** Transition symbol value/ Значение символа перехода */
10
+ readonly item = ref<string>('')
11
+
12
+ /**
13
+ * Checks if a transition symbol is set.
14
+ *
15
+ * Проверяет, установлен ли символ перехода.
16
+ */
17
+ is(): boolean {
18
+ return this.item.value !== ''
19
+ }
20
+
21
+ /**
22
+ * Checks if provided char equals current transition symbol.
23
+ *
24
+ * Проверяет, совпадает ли символ с текущим символом перехода.
25
+ * @param char candidate char / проверяемый символ
26
+ */
27
+ isChar(char: string): boolean {
28
+ return this.item.value === char
29
+ }
30
+
31
+ /**
32
+ * Sets new transition symbol.
33
+ *
34
+ * Устанавливает новый символ перехода.
35
+ * @param char transition symbol / символ перехода
36
+ */
37
+ set(char: string): this {
38
+ this.item.value = char
39
+ return this
40
+ }
41
+
42
+ /**
43
+ * Resets transition symbol to empty.
44
+ *
45
+ * Сбрасывает символ перехода в пустой.
46
+ */
47
+ reset(): this {
48
+ return this.set('')
49
+ }
50
+ }
@@ -0,0 +1,208 @@
1
+ import { MaskSpecial } from './MaskSpecial'
2
+ import { MaskItem } from './MaskItem'
3
+
4
+ /**
5
+ * Class for working with the character input location.
6
+ *
7
+ * Класс для работы с местом ввода символа.
8
+ */
9
+ export class MaskSelection {
10
+ /** Selection value/ Значение выделения */
11
+ protected value: number = 0
12
+ /** Immediate selection value/ Значение непосредственного выделения */
13
+ protected immediate: number = 0
14
+ /** Shift flag/ Флаг сдвига */
15
+ protected shift: boolean = false
16
+
17
+ /**
18
+ * Constructor
19
+ * @param special object for working with special characters/ объект для работы со специальными символами
20
+ * @param mask object for managing masks/ объект управления маской
21
+ */
22
+ constructor(
23
+ protected readonly special: MaskSpecial,
24
+ protected readonly mask: MaskItem
25
+ ) {
26
+ }
27
+
28
+ /**
29
+ * Getting the selection key number.
30
+ *
31
+ * Получение номера ключа выделения.
32
+ */
33
+ get(): number {
34
+ return this.value
35
+ }
36
+
37
+ /**
38
+ * Returns the selection number for the first element that is a special symbol.
39
+ *
40
+ * Возвращает номер выделения для первого элемента, являющегося специальным символом.
41
+ */
42
+ getFirst(): number {
43
+ return this.mask.info.value?.[0]?.key ?? 0
44
+ }
45
+
46
+ /**
47
+ * Getting the current key of the selected character.
48
+ *
49
+ * Получение текущего ключа выделенного символа.
50
+ */
51
+ getFocus(): number {
52
+ return this.getCharacter(this.value)
53
+ }
54
+
55
+ /**
56
+ * Getting the next key of the selected character.
57
+ *
58
+ * Получение следующего ключа выделенного символа.
59
+ */
60
+ getNext(): number {
61
+ return this.getCharacter(this.value + 1)
62
+ }
63
+
64
+ /**
65
+ * Getting the previous key of the selected symbol.
66
+ *
67
+ * Получение предыдущего ключа выделенного символа.
68
+ */
69
+ getPrevious(): number {
70
+ return this.getCharacter(this.value - 1)
71
+ }
72
+
73
+ /**
74
+ * Getting the key number of the nearest special character.
75
+ *
76
+ * Получение номера ключа ближайшего специального символа.
77
+ */
78
+ getImmediate(): number {
79
+ return this.getCharacter(this.immediate)
80
+ }
81
+
82
+ /**
83
+ * Getting the number of the key shifted to the left direction.
84
+ *
85
+ * Получение номера ключа, сдвинутого в левом направлении.
86
+ */
87
+ getShift(): number {
88
+ if (this.shift) {
89
+ return this.value > 0 ? (this.getCharacter(this.value - 1) + 1) : 0
90
+ }
91
+
92
+ return this.getFocus()
93
+ }
94
+
95
+ /**
96
+ * Changing the selection key number.
97
+ *
98
+ * Изменение номера ключа выделения.
99
+ * @param selection selection number/ номер выделения
100
+ */
101
+ set(selection: number): this {
102
+ this.value = selection
103
+ return this
104
+ }
105
+
106
+ /**
107
+ * Changes the selection key number according to the mask structure.
108
+ *
109
+ * Изменяет номер ключа выделения по структуре маски.
110
+ * @param selection selection number/ номер выделения
111
+ * @param focus is the element in focus/ элемент в фокусе ли
112
+ */
113
+ setByMask(selection: number, focus = true): this {
114
+ if (focus) {
115
+ let value: number | undefined
116
+ let immediate: number | undefined
117
+
118
+ this.mask.info.value.forEach((item) => {
119
+ if (value === undefined && item.key >= selection) {
120
+ value = item.index
121
+ }
122
+
123
+ if (item.key <= selection) {
124
+ immediate = item.index
125
+ }
126
+ })
127
+
128
+ this.set(value !== undefined ? value : this.mask.getLengthBySpecial())
129
+ this.setImmediate(immediate !== undefined ? immediate : this.mask.getLengthBySpecial())
130
+ }
131
+
132
+ return this
133
+ }
134
+
135
+ /**
136
+ * Changing the selection key for the nearest special character.
137
+ *
138
+ * Изменение ключа выделения для ближайшего специального символа.
139
+ * @param immediate selection key number/ номер ключа выделения
140
+ */
141
+ setImmediate(immediate: number): this {
142
+ this.immediate = immediate
143
+ return this
144
+ }
145
+
146
+ /**
147
+ * Turning shift on or off.
148
+ *
149
+ * Включение или отключение сдвига.
150
+ * @param shift value for shift/ значение для сдвига
151
+ */
152
+ setShift(shift: boolean): this {
153
+ this.shift = shift
154
+ return this
155
+ }
156
+
157
+ /**
158
+ * Resets the selection key for the nearest special character to the selection location.
159
+ *
160
+ * Сбрасывает ключ выделения для ближайшего специального символа до места выделения.
161
+ */
162
+ resetImmediate(): this {
163
+ this.immediate = this.value <= 0 ? 0 : this.value - 1
164
+ return this
165
+ }
166
+
167
+ /**
168
+ * Move the selection location back by 1 step.
169
+ *
170
+ * Передвигаем место выделения назад на 1 шаг.
171
+ */
172
+ goBack(): this {
173
+ if (this.value > 0) {
174
+ this.value--
175
+ }
176
+
177
+ return this
178
+ }
179
+
180
+ /**
181
+ * Move the selection location forward by 1 step.
182
+ *
183
+ * Передвигаем место выделения вперед на 1 шаг.
184
+ */
185
+ goNext(): this {
186
+ if (this.value <= this.mask.getLength()) {
187
+ this.value++
188
+ }
189
+
190
+ return this
191
+ }
192
+
193
+ /**
194
+ * Getting the key number at the selection location.
195
+ *
196
+ * Получение номера ключа по месту выделения.
197
+ * @param selection selection location/ место выделения
198
+ */
199
+ protected getCharacter(selection: number): number {
200
+ for (const item of this.mask.info.value) {
201
+ if (item.index >= selection) {
202
+ return item.key
203
+ }
204
+ }
205
+
206
+ return this.mask.getLength()
207
+ }
208
+ }