@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,49 @@
1
+ import { MaskBuffer } from './MaskBuffer'
2
+
3
+ /**
4
+ * Class for storing element focus state.
5
+ *
6
+ * Класс для хранения состояния фокуса элемента.
7
+ */
8
+ export class MaskFocus {
9
+ /** Focus state flag/ Флаг состояния фокуса */
10
+ protected value: boolean = false
11
+
12
+ /**
13
+ * Constructor
14
+ * @param buffer buffer helper object/ объект помощник буфера
15
+ */
16
+ constructor(
17
+ protected readonly buffer: MaskBuffer
18
+ ) {
19
+ }
20
+
21
+ /**
22
+ * Returns current focus state.
23
+ *
24
+ * Возвращает текущее состояние фокуса.
25
+ */
26
+ is(): boolean {
27
+ return this.value
28
+ }
29
+
30
+ /**
31
+ * Sets focus state to active and resets buffer.
32
+ *
33
+ * Устанавливает состояние фокуса активным и сбрасывает буфер.
34
+ */
35
+ in(): void {
36
+ this.value = true
37
+ this.buffer.reset()
38
+ }
39
+
40
+ /**
41
+ * Removes focus state and resets buffer.
42
+ *
43
+ * Снимает состояние фокуса и сбрасывает буфер.
44
+ */
45
+ out(): void {
46
+ this.value = false
47
+ this.buffer.reset()
48
+ }
49
+ }
@@ -0,0 +1,216 @@
1
+ import { computed } from 'vue'
2
+ import { GeoIntl, strFill } from '@dxtmisha/functional'
3
+
4
+ import { MaskType } from './MaskType'
5
+ import { MaskRubberItem } from './MaskRubberItem'
6
+
7
+ import type { FieldMasks } from '../../types/fieldTypes'
8
+ import type { MaskSpecialList, MaskSpecialProp } from './basicTypes'
9
+ import type { MaskProps } from './props'
10
+
11
+ /**
12
+ * Class for working with formatted number / currency masks.
13
+ *
14
+ * Класс для работы с форматированными масками числа / валюты.
15
+ */
16
+ export class MaskFormat {
17
+ /**
18
+ * Constructor
19
+ * @param props input data/ входные данные
20
+ * @param type mask type helper/ объект помощник типа маски
21
+ * @param rubberItem rubber groups helper/ объект помощник резиновых групп
22
+ */
23
+ constructor(
24
+ protected readonly props: MaskProps,
25
+ protected readonly type: MaskType,
26
+ protected readonly rubberItem: MaskRubberItem
27
+ ) {
28
+ }
29
+
30
+ /** Special symbols configuration (groups) for numeric input / Конфигурация специальных символов (группы) для числового ввода */
31
+ readonly special: MaskSpecialProp = {
32
+ n: {},
33
+ f: {
34
+ defaultValue: '0'
35
+ }
36
+ }
37
+
38
+ /** Rubber mask instructions (dynamic length per group) / Инструкции резиновой маски (динамическая длина по группам) */
39
+ readonly rubber = computed<MaskSpecialList>(() => {
40
+ return {
41
+ n: {
42
+ rubber: true,
43
+ transitionChar: this.getDecimal(),
44
+ maxLength: 10
45
+ },
46
+ f: {
47
+ rubber: this.isFractionRubber(),
48
+ maxLength: 4
49
+ }
50
+ }
51
+ })
52
+
53
+ /** Base view symbol per group / Базовый отображаемый символ для группы */
54
+ readonly view = computed<string>(() => {
55
+ if (this.type.isNumber()) {
56
+ return String.fromCharCode(8288)
57
+ }
58
+
59
+ return '0'
60
+ })
61
+
62
+ /** Fraction digits count / Количество знаков после запятой */
63
+ readonly fraction = computed<number>(() => {
64
+ if (this.type.isCurrency()) {
65
+ return 2
66
+ }
67
+
68
+ const fraction = this.props.fraction
69
+
70
+ if (typeof fraction === 'number') {
71
+ return fraction
72
+ }
73
+
74
+ if (
75
+ typeof fraction === 'string'
76
+ && fraction.match(/[0-9]+/)
77
+ ) {
78
+ return Number(fraction)
79
+ }
80
+
81
+ if (this.rubberItem.is('f')) {
82
+ return this.rubberItem.getByIndex('f') + 1
83
+ }
84
+
85
+ if (fraction === true) {
86
+ return 1
87
+ }
88
+
89
+ return 0
90
+ })
91
+
92
+ /** Returns mask characters for current numeric type / Возвращает символы маски для текущего числового типа */
93
+ readonly mask = computed<string[]>(() => {
94
+ if (this.type.isCurrency()) {
95
+ return this.toSpecial(this.getCurrency())
96
+ }
97
+
98
+ if (this.type.isNumberFormat()) {
99
+ return this.toSpecial(this.getNumberFormat())
100
+ }
101
+
102
+ return this.toSpecial(this.getNumber())
103
+ })
104
+
105
+ /**
106
+ * Is fraction part rubber (dynamic)?
107
+ *
108
+ * Является ли дробная часть резиновой (динамичной)?
109
+ */
110
+ isFractionRubber(): boolean {
111
+ return this.props.fraction === true
112
+ }
113
+
114
+ /**
115
+ * Returns standardized raw numeric value (integer or integer.fraction).
116
+ *
117
+ * Возвращает стандартизированное «сырое» числовое значение (целое или целое.дробь).
118
+ * @param value masks data object/ объект масок
119
+ */
120
+ getValueStandard(value: FieldMasks): string {
121
+ if (this.type.isNumber()) {
122
+ return value?.n?.value || ''
123
+ }
124
+
125
+ const number = `${value?.n?.value || '0'}.${value?.f?.value || '0'}`
126
+
127
+ if (number === '0.0') {
128
+ return '0'
129
+ }
130
+
131
+ return number
132
+ }
133
+
134
+ /** Returns base number mask string.
135
+ *
136
+ * Возвращает строку маски числа.
137
+ */
138
+ getNumber(): string {
139
+ return this.getNumberForString()
140
+ }
141
+
142
+ /**
143
+ * Returns formatted number mask string.
144
+ *
145
+ * Возвращает форматированную строку числа.
146
+ */
147
+ getNumberFormat(): string {
148
+ return this.getIntl().number(this.getNumberForString(), { maximumFractionDigits: 9 })
149
+ }
150
+
151
+ /**
152
+ * Returns currency mask string with appended currency symbol.
153
+ *
154
+ * Возвращает строку маски валюты с добавленным символом валюты.
155
+ */
156
+ getCurrency(): string {
157
+ return this.getIntl().currency(
158
+ this.getNumberForString(),
159
+ undefined,
160
+ this.props.currencyHide
161
+ )
162
+ }
163
+
164
+ /**
165
+ * Returns list of delimiter characters for switching to fraction part.
166
+ *
167
+ * Возвращает список символов-разделителей для перехода к дробной части.
168
+ */
169
+ getDecimal(): string[] {
170
+ return [this.getIntl().decimal(), '.']
171
+ }
172
+
173
+ /**
174
+ * Returns list of special group keys.
175
+ *
176
+ * Возвращает список ключей групп специальных символов.
177
+ */
178
+ getSpecial(): string[] {
179
+ return Object.keys(this.special)
180
+ }
181
+
182
+ /**
183
+ * Returns GeoIntl helper instance.
184
+ *
185
+ * Возвращает экземпляр помощника GeoIntl.
186
+ */
187
+ protected getIntl(): GeoIntl {
188
+ return new GeoIntl(this.props.language)
189
+ }
190
+
191
+ /**
192
+ * Builds base numeric pattern string (with optional fraction & currency).
193
+ *
194
+ * Формирует базовую строку числового паттерна (с необязательной дробью и валютой).
195
+ */
196
+ protected getNumberForString(): string {
197
+ const fraction = this.fraction.value
198
+
199
+ const number = strFill('9', this.rubberItem.getByIndex('n') + 1)
200
+ const numberFraction = fraction ? `.${strFill('3', fraction)}` : ''
201
+ const currency = this.type.isCurrency() && this.props.currency ? ` ${this.props.currency}` : ''
202
+
203
+ return `${number}${numberFraction}${currency}`
204
+ }
205
+
206
+ /**
207
+ * Converts digit markers (9/3) to group symbols (n/f).
208
+ *
209
+ * Преобразует цифровые маркеры (9/3) в групповые символы (n/f).
210
+ */
211
+ protected toSpecial(mask: string): string[] {
212
+ return mask.replace(/9/ig, 'n')
213
+ .replace(/3/ig, 'f')
214
+ .split('')
215
+ }
216
+ }
@@ -0,0 +1,218 @@
1
+ import { computed } from 'vue'
2
+ import { getMaxLengthAllArray, isArray } from '@dxtmisha/functional'
3
+
4
+ import { MaskType } from './MaskType'
5
+ import { MaskRubberItem } from './MaskRubberItem'
6
+ import { MaskDate } from './MaskDate'
7
+ import { MaskCharacterLength } from './MaskCharacterLength'
8
+ import { MaskSpecial } from './MaskSpecial'
9
+ import { MaskFormat } from './MaskFormat'
10
+
11
+ import type { MaskList, MaskSpecialInfo } from './basicTypes'
12
+ import type { MaskProps } from './props'
13
+
14
+ /**
15
+ * Class for working with a mask.
16
+ *
17
+ * Класс для работы с маской.
18
+ */
19
+ export class MaskItem {
20
+ /**
21
+ * Constructor
22
+ * @param props input data/ входные данные
23
+ * @param type object for working with the mask type/ объект для работы с типом маски
24
+ * @param rubberItem object for working with rubber elements/ объект для работы с резиновыми элементами
25
+ * @param characterLength object for managing input length/ объект управления длиной ввода
26
+ * @param date object for working with date types/ объект для работы с типом даты
27
+ * @param format object for managing numeric mask types/ объект для управления числовыми типами масок
28
+ * @param special object for working with special characters/ объект для работы со специальными символами
29
+ */
30
+ constructor(
31
+ protected readonly props: MaskProps,
32
+ protected readonly type: MaskType,
33
+ protected readonly rubberItem: MaskRubberItem,
34
+ protected readonly characterLength: MaskCharacterLength,
35
+ protected readonly date: MaskDate,
36
+ protected readonly format: MaskFormat,
37
+ protected readonly special: MaskSpecial
38
+ ) {
39
+ }
40
+
41
+ /**
42
+ * Returns the current mask.
43
+ *
44
+ * Возвращает текущую маску.
45
+ */
46
+ readonly item = computed<string[]>(() => {
47
+ if (this.type.isCurrencyOrNumber()) {
48
+ return this.format.mask.value
49
+ }
50
+
51
+ if (this.type.isDate()) {
52
+ return this.date.mask.value
53
+ }
54
+
55
+ return this.basic.value
56
+ })
57
+
58
+ /**
59
+ * Returns an array with information about the location of all special characters.
60
+ *
61
+ * Возвращает массив с информацией о расположении всех специальных символов.
62
+ */
63
+ readonly info = computed(() => {
64
+ const data: MaskSpecialInfo[] = []
65
+ let index = 0
66
+
67
+ this.item.value.forEach((char, key) => {
68
+ if (this.special.isSpecial(char)) {
69
+ data.push({
70
+ index,
71
+ key,
72
+ char
73
+ })
74
+
75
+ index++
76
+ }
77
+ })
78
+
79
+ return data
80
+ })
81
+
82
+ /**
83
+ * Returns the length of the mask or the maximum length of masks if there are several.
84
+ *
85
+ * Возвращает длину маски или максимальную длину масок, если их несколько.
86
+ */
87
+ readonly maxLength = computed<number>(() => {
88
+ const mask = this.getMask()
89
+
90
+ if (isArray(mask)) {
91
+ return getMaxLengthAllArray(mask)
92
+ } else {
93
+ return this.item.value.length
94
+ }
95
+ })
96
+
97
+ /**
98
+ * Returns the mask symbol by its index.
99
+ *
100
+ * Возвращает символ маски по его индексу.
101
+ * @param index index of the symbol's location/ индекс расположения символа
102
+ */
103
+ get(index: number): string {
104
+ return this.item.value?.[index] ?? ''
105
+ }
106
+
107
+ /**
108
+ * Returns the location number for replacement by its input symbol.
109
+ *
110
+ * Возвращает номер нахождения для замены по его символу ввода.
111
+ * @param char input symbol/ символ ввода
112
+ * @param selection minimum index for search/ минимальный индекс для поиска
113
+ */
114
+ getByChar(
115
+ char: string,
116
+ selection: number = -1
117
+ ): number {
118
+ let data = selection
119
+
120
+ this.item.value.forEach((item, index) => {
121
+ if (item === char && index >= selection) {
122
+ data = index
123
+ }
124
+ })
125
+
126
+ return data
127
+ }
128
+
129
+ /**
130
+ * Returns the length of the active mask.
131
+ *
132
+ * Возвращает длину активной маски.
133
+ */
134
+ getLength(): number {
135
+ return this.item.value.length
136
+ }
137
+
138
+ /**
139
+ * Returns the length of only special characters.
140
+ *
141
+ * Возвращает длину только из специальных символов.
142
+ */
143
+ getLengthBySpecial(): number {
144
+ return this.info.value.length
145
+ }
146
+
147
+ /**
148
+ * Returns how many special characters were highlighted.
149
+ *
150
+ * Возвращает, сколько специальных символов было выделено.
151
+ * @param start start of selection/ начало выделения
152
+ * @param end end of selection/ конец выделения
153
+ */
154
+ getQuantity(
155
+ start: number,
156
+ end: number
157
+ ): number {
158
+ if (start === end) {
159
+ return 1
160
+ }
161
+
162
+ let quantity = 0
163
+
164
+ for (let i = start; i < end; i++) {
165
+ if (this.special.isSpecial(this.get(i))) {
166
+ quantity++
167
+ }
168
+ }
169
+
170
+ return quantity
171
+ }
172
+
173
+ /**
174
+ * Returns the active mask.
175
+ *
176
+ * Возвращает активную маску.
177
+ */
178
+ protected readonly maskActive = computed<string>(() => {
179
+ const mask = this.getMask()
180
+
181
+ if (isArray(mask)) {
182
+ return mask.find(mask => this.getSpecialLength(mask) >= this.characterLength.get()) || mask?.[mask.length - 1] || ''
183
+ }
184
+
185
+ return mask
186
+ })
187
+
188
+ /**
189
+ * Returns the number of special characters in the current mask.
190
+ *
191
+ * Возвращает количество специальных символов в текущей маске.
192
+ */
193
+ protected readonly basic = computed<string[]>(() => {
194
+ return this.rubberItem.expandMask(this.maskActive.value).split('')
195
+ })
196
+
197
+ /**
198
+ * Returns a list of masks.
199
+ *
200
+ * Возвращает список масок.
201
+ */
202
+ protected getMask(): MaskList {
203
+ return this.props.mask ?? ''
204
+ }
205
+
206
+ /**
207
+ * Returns the number of special characters in the current mask.
208
+ *
209
+ * Возвращает количество специальных символов в текущей маске.
210
+ * @param mask selected mask/ выбранная маска
211
+ */
212
+ protected getSpecialLength(mask: string): number {
213
+ return mask
214
+ .split('')
215
+ .filter(char => this.special.isSpecial(char))
216
+ .length
217
+ }
218
+ }
@@ -0,0 +1,73 @@
1
+ import { MaskSpecial } from './MaskSpecial'
2
+ import { isString } from '@dxtmisha/functional'
3
+
4
+ import type { MaskMatchItem } from './basicTypes'
5
+ import type { MaskProps } from './props'
6
+
7
+ const MATCH_DEFAULT = /[0-9]/
8
+
9
+ /**
10
+ * Class for checking an incoming character.
11
+ *
12
+ * Класс для проверки входящего символа.
13
+ */
14
+ export class MaskMatch {
15
+ /**
16
+ * Constructor
17
+ * @param props input data/ входные данные
18
+ * @param special special symbols helper/ объект помощник специальных символов
19
+ */
20
+ constructor(
21
+ protected readonly props: MaskProps,
22
+ protected readonly special: MaskSpecial
23
+ ) {
24
+ }
25
+
26
+ /**
27
+ * Checks whether the character matches allowed pattern(s).
28
+ *
29
+ * Проверяет, соответствует ли символ разрешённому шаблону.
30
+ * @param char character to check/ символ для проверки
31
+ * @param groupName optional group name/ необязательное имя группы
32
+ */
33
+ is(
34
+ char: string,
35
+ groupName?: string
36
+ ): boolean {
37
+ const match = this.get(groupName)
38
+
39
+ if (match instanceof RegExp) {
40
+ return Boolean(char.match(match))
41
+ }
42
+
43
+ if (isString(match)) {
44
+ return Boolean(char.match(new RegExp(match)))
45
+ }
46
+
47
+ return Boolean(char.match(MATCH_DEFAULT))
48
+ }
49
+
50
+ /**
51
+ * Returns match definition (regexp or string) for group or global.
52
+ *
53
+ * Возвращает правило проверки (regexp или строка) для группы или глобально.
54
+ * @param groupName group name/ имя группы
55
+ */
56
+ get(groupName?: string): MaskMatchItem {
57
+ return (groupName && this.special.getMatch(groupName)) ?? this.props.match ?? MATCH_DEFAULT
58
+ }
59
+
60
+ /**
61
+ * Filters text returning only allowed characters (any group).
62
+ *
63
+ * Фильтрует текст, возвращая только допустимые символы (любая группа).
64
+ * @param text source text/ исходный текст
65
+ */
66
+ filter(text: string): string[] {
67
+ const special = this.special.item.value
68
+
69
+ return text
70
+ .split('')
71
+ .filter(char => special.find(groupName => this.is(char, groupName)))
72
+ }
73
+ }
@@ -0,0 +1,123 @@
1
+ import { computed } from 'vue'
2
+ import { forEach, isObjectNotArray, isString } from '@dxtmisha/functional'
3
+
4
+ import {
5
+ FieldInputCheckInclude,
6
+ type FieldInputCheckListInclude
7
+ } from '../../classes/field/FieldInputCheckInclude'
8
+
9
+ import { MaskType } from './MaskType'
10
+ import { MaskSpecial } from './MaskSpecial'
11
+ import { MaskDate } from './MaskDate'
12
+
13
+ import type { FieldPatternItemOrFunction, FieldPatternList } from '../../types/fieldTypes'
14
+ import type { MaskProps } from './props'
15
+
16
+ /**
17
+ * Class for producing validation pattern data per mask group.
18
+ *
19
+ * Класс для получения данных паттернов валидации по группам маски.
20
+ */
21
+ export class MaskPattern {
22
+ /**
23
+ * Constructor
24
+ * @param props input data/ входные данные
25
+ * @param type mask type helper/ объект помощник типа маски
26
+ * @param date date mask helper/ объект помощник маски даты
27
+ * @param special special symbols helper/ объект помощник специальных символов
28
+ */
29
+ constructor(
30
+ protected readonly props: MaskProps,
31
+ protected readonly type: MaskType,
32
+ protected readonly date: MaskDate,
33
+ protected readonly special: MaskSpecial
34
+ ) {
35
+ }
36
+
37
+ /** Validation input objects by group / Объекты проверки по названию группы */
38
+ readonly item = computed<FieldInputCheckListInclude>(() => {
39
+ const inputList = {} as FieldInputCheckListInclude
40
+
41
+ forEach(this.list.value, (pattern, group) => {
42
+ inputList[group] = new FieldInputCheckInclude(pattern, group)
43
+ })
44
+
45
+ if (this.props.check) {
46
+ inputList.check = new FieldInputCheckInclude(this.props.check)
47
+ }
48
+
49
+ return inputList
50
+ })
51
+
52
+ /** Patterns list by group / Список паттернов по группам */
53
+ readonly list = computed<FieldPatternList>(() => {
54
+ const patterns = this.getByType()
55
+
56
+ for (const index in patterns) {
57
+ const item = this.getPattern(index)
58
+
59
+ if (patterns[index]) {
60
+ if (isString(item)) {
61
+ Object.assign(patterns[index], { pattern: item })
62
+ } else if (
63
+ isObjectNotArray(item)
64
+ && isObjectNotArray(patterns[index])
65
+ ) {
66
+ Object.assign(patterns[index], item)
67
+ }
68
+ }
69
+ }
70
+
71
+ return patterns
72
+ })
73
+
74
+ /**
75
+ * Checks if there is a global check pattern.
76
+ *
77
+ * Проверяет, есть ли глобальный паттерн проверки.
78
+ */
79
+ isCheck(): boolean {
80
+ return Boolean(this.props.check)
81
+ }
82
+
83
+ /**
84
+ * Returns validation input object by group.
85
+ *
86
+ * Возвращает объект проверки по названию группы.
87
+ * @param groupName group name (default: check)/ имя группы (по умолчанию: check)
88
+ */
89
+ getInput(
90
+ groupName: string = FieldInputCheckInclude.getGroupDefault()
91
+ ): FieldInputCheckInclude | undefined {
92
+ return this.item.value?.[groupName]
93
+ }
94
+
95
+ /**
96
+ * Builds base patterns object depending on mask type.
97
+ *
98
+ * Формирует базовый объект паттернов в зависимости от типа маски.
99
+ */
100
+ protected getByType(): FieldPatternList {
101
+ if (this.type.isDate()) {
102
+ return this.date.getPattern()
103
+ }
104
+
105
+ const patterns: FieldPatternList = {}
106
+
107
+ this.special.item.value.forEach((name) => {
108
+ patterns[name] = {}
109
+ })
110
+
111
+ return patterns
112
+ }
113
+
114
+ /**
115
+ * Returns pattern definition for group or global pattern.
116
+ *
117
+ * Возвращает определение паттерна для группы или глобальный паттерн.
118
+ * @param groupName group name/ имя группы
119
+ */
120
+ protected getPattern(groupName?: string): FieldPatternItemOrFunction | undefined {
121
+ return (groupName && this.special.getPattern(groupName)) ?? this.props.pattern
122
+ }
123
+ }