@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,90 @@
1
+ import { computed, type VNode } from 'vue'
2
+ import { type ConstrClass, getExp, isFilled } from '@dxtmisha/functional'
3
+
4
+ import { LabelInclude } from './LabelInclude'
5
+ import { SkeletonInclude } from '../constructors/Skeleton'
6
+
7
+ import type { LabelHighlightProps, LabelHighlightSlots } from '../types/labelTypes'
8
+
9
+ /**
10
+ * The LabelHighlightInclude class extends LabelInclude to add support for highlighting parts of text.
11
+ * Used to display a label with the ability to highlight specific parts.
12
+ *
13
+ * Класс LabelHighlightInclude расширяет LabelInclude и добавляет поддержку выделения частей текста.
14
+ * Используется для отображения метки с возможностью выделения определённых частей.
15
+ */
16
+ export class LabelHighlightInclude extends LabelInclude {
17
+ /**
18
+ * Constructor for the LabelHighlightInclude class.
19
+ *
20
+ * Конструктор для класса LabelHighlightInclude.
21
+ * @param props input property/ входное свойство
22
+ * @param className class name/ название класса
23
+ * @param classesExtra additional classes/ дополнительные классы
24
+ * @param slots object for working with slots/ объект для работы со слотами
25
+ * @param elementsExtra additional elements/ дополнительные элементы
26
+ * @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
27
+ */
28
+ constructor(
29
+ protected readonly props: Readonly<LabelHighlightProps>,
30
+ protected readonly className: string,
31
+ protected readonly classesExtra?: ConstrClass,
32
+ protected readonly slots?: LabelHighlightSlots,
33
+ protected readonly elementsExtra?: () => VNode[],
34
+ protected readonly skeleton?: SkeletonInclude
35
+ ) {
36
+ super(
37
+ props,
38
+ className,
39
+ classesExtra,
40
+ slots,
41
+ elementsExtra,
42
+ computed(() => this.getLabel()),
43
+ undefined,
44
+ skeleton
45
+ )
46
+ }
47
+
48
+ /**
49
+ * Returns a string with highlighted parts.
50
+ * If highlighting is not required, returns the original string.
51
+ *
52
+ * Возвращает строку с выделенными частями.
53
+ * Если выделение не требуется, возвращает исходную строку.
54
+ */
55
+ protected getLabel = (): string | undefined => {
56
+ const props = this.props
57
+
58
+ if (
59
+ props.highlight
60
+ && props.highlight.length >= this.getLengthStart()
61
+ && props.label
62
+ ) {
63
+ const className = `${this.className}__highlight`
64
+ const label = props.label.toString()
65
+ const exp = getExp(props.highlight, 'i')
66
+
67
+ if (label.match(exp)) {
68
+ return label.replace(exp, text => `<span class="${className}">${text}</span>`)
69
+ }
70
+
71
+ if (
72
+ isFilled(props.value)
73
+ && props.value.toString().match(exp)
74
+ ) {
75
+ return `<span class="${className}">${label}</span>`
76
+ }
77
+ }
78
+
79
+ return undefined
80
+ }
81
+
82
+ /**
83
+ * Returns the minimum length of the string to start highlighting.
84
+ *
85
+ * Возвращает минимальную длину строки для начала выделения.
86
+ */
87
+ protected getLengthStart() {
88
+ return this.props.highlightLengthStart ?? 2
89
+ }
90
+ }
@@ -0,0 +1,171 @@
1
+ import { computed, type Ref, type VNode } from 'vue'
2
+ import { type ConstrClass, isFilled, render } from '@dxtmisha/functional'
3
+
4
+ import { SkeletonInclude } from '../constructors/Skeleton'
5
+
6
+ import type { LabelAlternativeSlots, LabelProps, LabelSlots } from '../types/labelTypes'
7
+
8
+ /**
9
+ * Use for adding text
10
+ *
11
+ * Использование для добавления текста
12
+ */
13
+ export class LabelInclude {
14
+ /**
15
+ * Constructor
16
+ * @param props input property/ входное свойство
17
+ * @param className class name/ название класса
18
+ * @param classesExtra additional classes/ дополнительные классы
19
+ * @param slots object for working with slots/ объект для работы со слотами
20
+ * @param elementsExtra additional elements/ дополнительные элементы
21
+ * @param labelReplacing additional elements/ дополнительные элементы
22
+ * @param alternativeSlots alternative slots/ альтернативные слоты
23
+ * @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
24
+ */
25
+ constructor(
26
+ protected readonly props: Readonly<LabelProps>,
27
+ protected readonly className: string,
28
+ protected readonly classesExtra?: ConstrClass,
29
+ protected readonly slots?: LabelSlots | LabelAlternativeSlots,
30
+ protected readonly elementsExtra?: () => VNode[],
31
+ protected readonly labelReplacing?: Ref<string | number | undefined>,
32
+ protected readonly alternativeSlots?: boolean,
33
+ protected readonly skeleton?: SkeletonInclude
34
+ ) {
35
+ }
36
+
37
+ /** Label presence check/ Проверка наличия метки */
38
+ readonly is = computed<boolean>(() => {
39
+ if (
40
+ this.props.label
41
+ || this.labelReplacing?.value
42
+ ) {
43
+ return true
44
+ }
45
+
46
+ if (this.slots) {
47
+ if (this.alternativeSlots) {
48
+ return 'label' in this.slots
49
+ }
50
+
51
+ return 'default' in this.slots
52
+ }
53
+
54
+ return false
55
+ })
56
+
57
+ /**
58
+ * Render the label
59
+ *
60
+ * Рендер метки
61
+ * @param childrenExtra additional children/ дополнительные дочерние элементы
62
+ */
63
+ render(
64
+ childrenExtra?: any[]
65
+ ): VNode[] {
66
+ const elements: any[] = []
67
+
68
+ if (this.is.value) {
69
+ const children: any[] = [
70
+ ...this.initLabel(),
71
+ ...this.initLabelReplacing(),
72
+ ...this.initSlot()
73
+ ]
74
+
75
+ if (this.elementsExtra) {
76
+ children.push(...this.elementsExtra())
77
+ }
78
+
79
+ if (childrenExtra) {
80
+ children.push(...childrenExtra)
81
+ }
82
+
83
+ if (children.length > 0) {
84
+ elements.push(
85
+ render(
86
+ 'span',
87
+ { class: this.getClassName() },
88
+ children,
89
+ 'label'
90
+ )
91
+ )
92
+ }
93
+ }
94
+
95
+ return elements
96
+ }
97
+
98
+ /**
99
+ * Get the class name for the label
100
+ *
101
+ * Получение имени класса для метки
102
+ */
103
+ protected getClassName(): ConstrClass {
104
+ const classes: ConstrClass = [`${this.className}__label`]
105
+
106
+ if (this.classesExtra) {
107
+ classes.push(this.classesExtra)
108
+ }
109
+
110
+ if (this.skeleton) {
111
+ classes.push(this.skeleton.classes.value)
112
+ }
113
+
114
+ return classes
115
+ }
116
+
117
+ /**
118
+ * Adds the label text if it exists
119
+ *
120
+ * Добавляет текст метки, если он есть
121
+ */
122
+ protected initLabel(): any[] {
123
+ if (
124
+ !this.labelReplacing?.value
125
+ && isFilled(this.props.label)
126
+ ) {
127
+ return [this.props.label]
128
+ }
129
+
130
+ return []
131
+ }
132
+
133
+ /**
134
+ * Adds alternative label text if it exists
135
+ *
136
+ * Добавляет альтернативный текст метки, если он есть
137
+ */
138
+ protected initLabelReplacing(): any[] {
139
+ if (isFilled(this.labelReplacing?.value)) {
140
+ return [
141
+ render(
142
+ 'span',
143
+ { innerHTML: this.labelReplacing.value },
144
+ undefined,
145
+ 'highlight'
146
+ )
147
+ ]
148
+ }
149
+
150
+ return []
151
+ }
152
+
153
+ /**
154
+ * Adds a slot for the label if it exists
155
+ *
156
+ * Добавляет слот для метки, если он есть
157
+ */
158
+ protected initSlot(): any[] {
159
+ if (this.slots) {
160
+ if (this.alternativeSlots) {
161
+ if ('label' in this.slots) {
162
+ return [this.slots.label?.({})]
163
+ }
164
+ } else if ('default' in this.slots) {
165
+ return [this.slots.default?.({})]
166
+ }
167
+ }
168
+
169
+ return []
170
+ }
171
+ }
@@ -0,0 +1,70 @@
1
+ import { computed, type VNode } from 'vue'
2
+ import { type ConstrClass, GeoRef, isNumber, toNumberByMax } from '@dxtmisha/functional'
3
+
4
+ import { LabelInclude } from './LabelInclude'
5
+ import { SkeletonInclude } from '../constructors/Skeleton'
6
+
7
+ import type { LabelNumberProps, LabelNumberSlots } from '../types/labelTypes'
8
+
9
+ /**
10
+ * The LabelNumberInclude class extends LabelInclude to handle numeric labels.
11
+ * Allows converting and displaying numeric values with respect to maximum constraints.
12
+ *
13
+ * Класс LabelNumberInclude расширяет LabelInclude для работы с числовыми метками.
14
+ * Позволяет преобразовывать и отображать числовые значения с учетом максимальных ограничений.
15
+ */
16
+ export class LabelNumberInclude extends LabelInclude {
17
+ /**
18
+ * Constructor for working with text that has maximum values.
19
+ *
20
+ * Конструктор для работы с текстом, у которого есть максимальные значения.
21
+ * @param props input property/ входное свойство
22
+ * @param className class name/ название класса
23
+ * @param classesExtra additional classes/ дополнительные классы
24
+ * @param slots object for working with slots/ объект для работы со слотами
25
+ * @param elementsExtra additional elements/ дополнительные элементы
26
+ * @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
27
+ */
28
+ constructor(
29
+ protected readonly props: Readonly<LabelNumberProps>,
30
+ protected readonly className: string,
31
+ protected readonly classesExtra?: ConstrClass,
32
+ protected readonly slots?: LabelNumberSlots,
33
+ protected readonly elementsExtra?: () => VNode[],
34
+ protected readonly skeleton?: SkeletonInclude
35
+ ) {
36
+ super(
37
+ props,
38
+ className,
39
+ classesExtra,
40
+ slots,
41
+ elementsExtra,
42
+ computed(() => this.getNumber()),
43
+ undefined,
44
+ skeleton
45
+ )
46
+ }
47
+
48
+ /**
49
+ * Returns text with conversion to maximum values.
50
+ *
51
+ * Возвращает текст с преобразованием в максимальные значения.
52
+ */
53
+ protected getNumber(): string | undefined {
54
+ const props = this.props
55
+
56
+ if (
57
+ props.label
58
+ && isNumber(props.label)
59
+ ) {
60
+ return toNumberByMax(
61
+ props.label,
62
+ props.labelMax,
63
+ props.formatting,
64
+ GeoRef.getLanguage().value
65
+ ).toString()
66
+ }
67
+
68
+ return undefined
69
+ }
70
+ }
@@ -0,0 +1,49 @@
1
+ import { watch } from 'vue'
2
+ import {
3
+ isFunction,
4
+ type RefType,
5
+ toCamelCase,
6
+ toCamelCaseFirst
7
+ } from '@dxtmisha/functional'
8
+
9
+ /**
10
+ * Class for managing model synchronization and event emission.
11
+ * Handles two-way data binding with reactive values and emits update events.
12
+ *
13
+ * Класс для управления синхронизацией модели и испусканием событий.
14
+ * Обрабатывает двустороннюю привязку данных с реактивными значениями и испускает события обновления.
15
+ */
16
+ export class ModelInclude<Value = string> {
17
+ /**
18
+ * Constructor
19
+ * @param index The index key for the model property/ Ключ индекса для свойства модели
20
+ * @param emits Function to emit events/ Функция для испускания событий
21
+ * @param syncValue Reactive value to synchronize/ Реактивное значение для синхронизации
22
+ */
23
+ constructor(
24
+ protected readonly index: string,
25
+ protected readonly emits?: any,
26
+ protected readonly syncValue?: RefType<Value>
27
+ ) {
28
+ if (syncValue) {
29
+ watch(syncValue, (newValue: Value) => {
30
+ this.emit(newValue)
31
+ }, { immediate: true })
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Emits an event to update the model value.
37
+ * Triggers the corresponding update event with the new value.
38
+ *
39
+ * Испускает событие для обновления значения модели.
40
+ * Запускает соответствующее событие обновления с новым значением.
41
+ * @param value The new value to set/ Новое значение для установки
42
+ */
43
+ emit(value: Value): void {
44
+ if (isFunction(this.emits)) {
45
+ this.emits(`update:${toCamelCase(this.index)}`, value)
46
+ this.emits(`update:model${toCamelCaseFirst(this.index)}`, value)
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,71 @@
1
+ import { computed, type VNode } from 'vue'
2
+ import { isFilled, render } from '@dxtmisha/functional'
3
+
4
+ import { SkeletonInclude } from '../constructors/Skeleton'
5
+
6
+ import type { PrefixProps, PrefixSlots } from '../types/prefixTypes'
7
+
8
+ /**
9
+ * Class for working with prefix.
10
+ *
11
+ * Класс для работы с prefix.
12
+ */
13
+ export class PrefixInclude {
14
+ /**
15
+ * Constructor
16
+ * @param props input property/ входное свойство
17
+ * @param className class name/ название класса
18
+ * @param slots object for working with slots/ объект для работы со слотами
19
+ * @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
20
+ */
21
+ constructor(
22
+ protected readonly props: Readonly<PrefixProps>,
23
+ protected readonly className: string,
24
+ protected readonly slots?: PrefixSlots,
25
+ protected readonly skeleton?: SkeletonInclude
26
+ ) {
27
+ }
28
+
29
+ /**
30
+ * Returns true if prefix is filled
31
+ *
32
+ * Возвращает true, если prefix заполнен
33
+ */
34
+ readonly is = computed(() => Boolean(this.props.prefix || this.slots?.prefix))
35
+
36
+ /**
37
+ * Renders prefix element with content from props or slots.
38
+ *
39
+ * Отображает элемент prefix с содержимым из props или slots.
40
+ */
41
+ render(): VNode[] {
42
+ const children: any[] = []
43
+
44
+ if (isFilled(this.props.prefix)) {
45
+ children.push(this.props.prefix)
46
+ }
47
+
48
+ if (this.slots?.prefix) {
49
+ children.push(this.slots.prefix?.({}))
50
+ }
51
+
52
+ if (children.length > 0) {
53
+ return [
54
+ render(
55
+ 'div',
56
+ {
57
+ 'class': {
58
+ [`${this.className}__prefix`]: true,
59
+ ...this.skeleton?.classes.value
60
+ },
61
+ 'data-event-type': 'prefix'
62
+ },
63
+ children,
64
+ 'prefix'
65
+ )
66
+ ]
67
+ }
68
+
69
+ return []
70
+ }
71
+ }
@@ -0,0 +1,71 @@
1
+ import { computed, type VNode } from 'vue'
2
+ import { isFilled, render } from '@dxtmisha/functional'
3
+
4
+ import { SkeletonInclude } from '../constructors/Skeleton'
5
+
6
+ import type { SuffixProps, SuffixSlots } from '../types/suffixTypes'
7
+
8
+ /**
9
+ * Class for working with suffix.
10
+ *
11
+ * Класс для работы с suffix.
12
+ */
13
+ export class SuffixInclude {
14
+ /**
15
+ * Constructor
16
+ * @param props input property/ входное свойство
17
+ * @param className class name/ название класса
18
+ * @param slots object for working with slots/ объект для работы со слотами
19
+ * @param skeleton optional skeleton for loading state/ необязательный скелетон для состояния загрузки
20
+ */
21
+ constructor(
22
+ protected readonly props: Readonly<SuffixProps>,
23
+ protected readonly className: string,
24
+ protected readonly slots?: SuffixSlots,
25
+ protected readonly skeleton?: SkeletonInclude
26
+ ) {
27
+ }
28
+
29
+ /**
30
+ * Returns true if suffix is filled
31
+ *
32
+ * Возвращает true, если suffix заполнен
33
+ */
34
+ readonly is = computed(() => Boolean(this.props.suffix || this.slots?.suffix))
35
+
36
+ /**
37
+ * Renders suffix element with content from props or slots.
38
+ *
39
+ * Отображает элемент suffix с содержимым из props или slots.
40
+ */
41
+ render(): VNode[] {
42
+ const children: any[] = []
43
+
44
+ if (isFilled(this.props.suffix)) {
45
+ children.push(this.props.suffix)
46
+ }
47
+
48
+ if (this.slots?.suffix) {
49
+ children.push(this.slots.suffix?.({}))
50
+ }
51
+
52
+ if (children.length > 0) {
53
+ return [
54
+ render(
55
+ 'div',
56
+ {
57
+ 'class': {
58
+ [`${this.className}__suffix`]: true,
59
+ ...this.skeleton?.classes.value
60
+ },
61
+ 'data-event-type': 'suffix'
62
+ },
63
+ children,
64
+ 'suffix'
65
+ )
66
+ ]
67
+ }
68
+
69
+ return []
70
+ }
71
+ }
@@ -0,0 +1,100 @@
1
+ import { computed } from 'vue'
2
+
3
+ import { FieldTypeInclude } from './FieldTypeInclude'
4
+ import { FieldPatternInclude } from './FieldPatternInclude'
5
+
6
+ import type { FieldAllProps } from '../../types/fieldTypes'
7
+
8
+ /**
9
+ * Class for working with input elements.
10
+ *
11
+ * Класс для работы с элементами ввода.
12
+ */
13
+ export class FieldAttributesInclude {
14
+ /**
15
+ * Constructor
16
+ * @param props input data/ входные данные
17
+ * @param type object for working with input type/ объект для работы с типом ввода
18
+ * @param pattern object for working with checks by regular expressions/
19
+ * объект для работы с проверкой по регулярным выражениям
20
+ */
21
+ constructor(
22
+ protected readonly props: FieldAllProps,
23
+ protected readonly type?: FieldTypeInclude,
24
+ protected readonly pattern?: FieldPatternInclude
25
+ ) {
26
+ }
27
+
28
+ /** Returns data for verification/ Возвращает данные для проверки */
29
+ readonly list = computed<Record<string, any>>(() => {
30
+ const data: Record<string, any> = {}
31
+
32
+ this.getAttributes().forEach((index) => {
33
+ if (index in this.props) {
34
+ switch (index) {
35
+ case 'type':
36
+ if (this.type) {
37
+ data[index] = this.type.item.value
38
+ } else {
39
+ data[index] = this.props.type
40
+ }
41
+ break
42
+ case 'pattern':
43
+ if (this.pattern) {
44
+ data.pattern = this.pattern.item.value
45
+ }
46
+ break
47
+ default:
48
+ data[index] = this.props[index]
49
+ }
50
+ }
51
+ })
52
+
53
+ return {
54
+ ...data,
55
+ ...this.props.inputAttrs
56
+ }
57
+ })
58
+
59
+ /** Returns data for verification/ Возвращает данные для проверки */
60
+ readonly listForCheck = computed<Record<string, any>>(() => {
61
+ const data = this.list.value
62
+
63
+ if (
64
+ this.props.min
65
+ || this.props.max
66
+ || this.props.step
67
+ ) {
68
+ return {
69
+ ...data,
70
+ type: 'number'
71
+ }
72
+ }
73
+
74
+ return data
75
+ })
76
+
77
+ /**
78
+ * Returns the list of attributes to be set on the input element.
79
+ *
80
+ * Возвращает список атрибутов, которые нужно установить на элемент ввода.
81
+ */
82
+ protected getAttributes(): (keyof typeof this.props)[] {
83
+ return [
84
+ 'type',
85
+ 'name',
86
+ 'required',
87
+ 'multiple',
88
+
89
+ 'step',
90
+ 'min',
91
+ 'max',
92
+
93
+ 'minlength',
94
+ 'maxlength',
95
+
96
+ 'accept',
97
+ 'pattern'
98
+ ]
99
+ }
100
+ }
@@ -0,0 +1,52 @@
1
+ import { ref } from 'vue'
2
+ import type { FieldAllProps } from '../../types/fieldTypes'
3
+
4
+ /**
5
+ * The class tracks field value change state
6
+ *
7
+ * Класс возвращает состояние изменения значения поля
8
+ */
9
+ export class FieldChangeInclude {
10
+ /** Change state flag/ Флаг состояния изменения */
11
+ readonly item = ref<boolean>(false)
12
+
13
+ /**
14
+ * Constructor
15
+ * @param props input data/ входные данные
16
+ */
17
+ constructor(props: FieldAllProps) {
18
+ if (props.value || props.modelValue) {
19
+ this.item.value = true
20
+ }
21
+ }
22
+
23
+ /**
24
+ * Returns whether value was changed
25
+ *
26
+ * Возвращает, было ли значение изменено
27
+ */
28
+ is(): boolean {
29
+ return Boolean(this.item.value)
30
+ }
31
+
32
+ /**
33
+ * Sets change state
34
+ *
35
+ * Устанавливает состояние изменения
36
+ * @param change new state value/ новое значение состояния
37
+ */
38
+ set(change: boolean) {
39
+ this.item.value = change
40
+ }
41
+
42
+ /**
43
+ * Force mark as changed
44
+ *
45
+ * Принудительно помечает как изменённое
46
+ */
47
+ toChange() {
48
+ if (!this.item.value) {
49
+ this.set(true)
50
+ }
51
+ }
52
+ }