@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,318 @@
1
+ import { computed, ref, type ToRefs, watch } from 'vue'
2
+ import {
3
+ anyToString,
4
+ getRef,
5
+ isArray,
6
+ isFilled,
7
+ isObject,
8
+ type RefOrNormal,
9
+ setValues,
10
+ toArray,
11
+ toNumber
12
+ } from '@dxtmisha/functional'
13
+
14
+ import { FieldElementInclude } from './FieldElementInclude'
15
+
16
+ import type { FieldValueProps } from '../../types/fieldTypes'
17
+
18
+ /**
19
+ * Class for working with input values.
20
+ *
21
+ * Класс для работы со значениями инпута.
22
+ */
23
+ export class FieldValueInclude<Value = any> {
24
+ /** Current value/ Текущее значение */
25
+ readonly item = ref<Value>()
26
+ /** Indicates if the value is complete/ Указывает, полное ли значение */
27
+ readonly isFull = ref<boolean>(true)
28
+
29
+ /** Indicates if there are temporary values/ Указывает, есть ли временные значения */
30
+ protected readonly hasEdit = ref<boolean>(false)
31
+
32
+ /**
33
+ * Constructor
34
+ * @param props input data /<br>входные данные
35
+ * @param refs input data in the form of reactive elements /<br>входные данные в виде реактивных элементов
36
+ * @param element object for working with the input element /<br>объект для работы с элементом ввода
37
+ * @param original original values /<br>оригинальные значения
38
+ */
39
+
40
+ constructor(
41
+ protected readonly props: FieldValueProps<Value>,
42
+ protected readonly refs: ToRefs<FieldValueProps<Value>>,
43
+ protected readonly element?: FieldElementInclude,
44
+ protected readonly original?: RefOrNormal<Value>
45
+ ) {
46
+ this.item.value = this.getOriginal()
47
+
48
+ watch([
49
+ refs.value,
50
+ refs.modelValue
51
+ ], this.update)
52
+ }
53
+
54
+ /** Checks if there are values or temporary values/ Проверяет, есть ли значения или временные значения */
55
+ readonly is = computed<boolean>(() => {
56
+ return this.hasEdit.value
57
+ || this.boolean.value
58
+ || Boolean(this.props.placeholder)
59
+ })
60
+
61
+ /** Checks if there are any values/ Проверяет, есть ли значения */
62
+ readonly isValue = computed<boolean>(() => this.hasEdit.value || this.boolean.value)
63
+
64
+ /** Returns the current value if isFull is true/ Возвращает текущее значение, если isFull истинно */
65
+ readonly itemByFull = computed<Value | undefined>(() => this.isFull.value ? this.item.value : undefined)
66
+
67
+ /**
68
+ * Returns the current value, converted to a number/
69
+ * Возвращает текущее значение, преобразованное в номер
70
+ */
71
+ readonly number = computed<number>(() => {
72
+ if (this.boolean.value) {
73
+ return toNumber(this.string.value)
74
+ }
75
+
76
+ return 0
77
+ })
78
+
79
+ /** Returns the current value of type string/ Возвращает текущее значение типа string */
80
+ readonly string = computed<string>(() => anyToString(this.item.value))
81
+
82
+ /** Returns the current value of type boolean/ Возвращает текущее значение типа boolean */
83
+ readonly boolean = computed<boolean>(() => isFilled(this.item.value))
84
+
85
+ /** Returns the length of the entered value/ Возвращает длину введенного значения */
86
+ readonly length = computed<number>(() => {
87
+ const value = this.item.value
88
+
89
+ if (isArray(value)) {
90
+ return value.length
91
+ }
92
+
93
+ if (isObject(value)) {
94
+ return Object.keys(value).length
95
+ }
96
+
97
+ return this.string.value.length ?? 0
98
+ })
99
+
100
+ /**
101
+ * Returns the current value as an array.
102
+ *
103
+ * Возвращает текущее значение в виде массива.
104
+ */
105
+ getToArray(): Value[] {
106
+ return toArray(this.item.value) as Value[]
107
+ }
108
+
109
+ /**
110
+ * Changes the value.
111
+ *
112
+ * Изменяет значение.
113
+ * @param value changeable value/ изменяемое значение
114
+ */
115
+ set(value: any): this {
116
+ if (this.isDifference(value)) {
117
+ this.item.value = setValues(
118
+ this.item.value,
119
+ value,
120
+ {
121
+ multiple: this.props.multiple,
122
+ maxlength: toNumber(this.props.maxlength)
123
+ }
124
+ ) as Value
125
+
126
+ const element = this.element?.getElement()
127
+
128
+ if (
129
+ element
130
+ && element.value
131
+ && 'setValue' in element.value
132
+ ) {
133
+ element.value?.setValue(this.item.value)
134
+ }
135
+ }
136
+
137
+ return this
138
+ }
139
+
140
+ /**
141
+ * Changes the values by the selected element.
142
+ *
143
+ * Изменяет значения по выбранному элементу.
144
+ * @param event event object/ объект события
145
+ */
146
+ setByEvent(event: Event): this
147
+ setByEvent(value: Record<string, any>): this
148
+ setByEvent(value: any): this
149
+ setByEvent(eventValue: Event | Record<string, any> | any): this {
150
+ switch (typeof eventValue) {
151
+ case 'object':
152
+ if (eventValue) {
153
+ if (
154
+ 'value' in eventValue
155
+ && eventValue.value !== undefined
156
+ ) {
157
+ this.set(eventValue.value)
158
+ } else if ('target' in eventValue) {
159
+ this.setByTarget(eventValue.target as HTMLInputElement)
160
+ }
161
+
162
+ if ('hasEdit' in eventValue) {
163
+ this.setHasEdit(eventValue.hasEdit)
164
+ }
165
+
166
+ if ('isFull' in eventValue) {
167
+ this.setFull(eventValue.isFull)
168
+ }
169
+ }
170
+
171
+ break
172
+ default:
173
+ this.set(eventValue)
174
+ break
175
+ }
176
+
177
+ return this
178
+ }
179
+
180
+ /**
181
+ * Changes the values by the selected element.
182
+ *
183
+ * Изменяет значения по выбранному элементу.
184
+ * @param target selected elements/ выбранные элементы
185
+ */
186
+ setByTarget(target: HTMLInputElement): this {
187
+ return this.set(
188
+ this.isCheckbox(target)
189
+ ? target.checked
190
+ : target.value
191
+ )
192
+ }
193
+
194
+ /**
195
+ * Changes the value by the checked property.
196
+ *
197
+ * Изменяет значение по свойству checked.
198
+ * @param event event value/ значение события
199
+ */
200
+ setByChecked(event: Event): this {
201
+ const input = event.target as HTMLInputElement
202
+
203
+ return this.set(input.checked)
204
+ }
205
+
206
+ /**
207
+ * Changes the value for radio type.
208
+ *
209
+ * Изменяет значение для типа radio.
210
+ * @param event event object/ объект события
211
+ */
212
+ setByRadio(event: Event): this {
213
+ const input = event.target as HTMLInputElement
214
+ const value = input.checked ? input.value : ''
215
+
216
+ return this.set(value)
217
+ }
218
+
219
+ /**
220
+ * Sets the isFull value.
221
+ *
222
+ * Устанавливает значение isFull.
223
+ * @param isFull isFull value/ значение isFull
224
+ */
225
+ setFull(isFull: boolean) {
226
+ this.isFull.value = isFull
227
+ }
228
+
229
+ /**
230
+ * Sets the hasEdit value.
231
+ *
232
+ * Устанавливает значение hasEdit.
233
+ * @param hasEdit hasEdit value/ значение hasEdit
234
+ */
235
+ setHasEdit(hasEdit: boolean) {
236
+ this.hasEdit.value = hasEdit
237
+ }
238
+
239
+ /**
240
+ * Sets the value to the original one.
241
+ *
242
+ * Устанавливает значение на оригинальное.
243
+ */
244
+ setToOriginal(): this {
245
+ this.item.value = this.getOriginal()
246
+ return this
247
+ }
248
+
249
+ /**
250
+ * Clear all values to the original ones.
251
+ *
252
+ * Очисти все значения до оригинальных.
253
+ */
254
+ clear(): this {
255
+ this.item.value = getRef(this.original)
256
+ this.element?.clear()
257
+
258
+ this.hasEdit.value = false
259
+ this.isFull.value = true
260
+
261
+ return this
262
+ }
263
+
264
+ /**
265
+ * Is the selected type a checkbox.
266
+ *
267
+ * Является ли выбранный тип чекбокс.
268
+ * @param target selected elements/ выбранные элементы
269
+ */
270
+ protected isCheckbox(target: HTMLInputElement): boolean {
271
+ return target.type === 'checkbox'
272
+ }
273
+
274
+ /**
275
+ * Checks if the value has actually been changed.
276
+ *
277
+ * Проверяет, было ли значение действительно изменено.
278
+ * @param value value to check/ значение для проверки
279
+ */
280
+ protected isDifference(
281
+ value: any = this.getOriginal()
282
+ ): boolean {
283
+ return this.string.value !== anyToString(value)
284
+ }
285
+
286
+ /**
287
+ * Returns the original value.
288
+ *
289
+ * Возвращает оригинальное значение.
290
+ */
291
+ protected getOriginal(): any {
292
+ return this.props.value || this.props.modelValue || getRef(this.original)
293
+ }
294
+
295
+ /**
296
+ * Changes the values to the original ones.
297
+ *
298
+ * Изменяет значения на оригинальные.
299
+ */
300
+ protected readonly update = (): void => {
301
+ if (
302
+ this.isEdit(this.props.value)
303
+ || this.isEdit(this.props.modelValue)
304
+ ) {
305
+ this.setToOriginal()
306
+ }
307
+ }
308
+
309
+ /**
310
+ * Checks if the value is being edited.
311
+ *
312
+ * Проверяет, редактируется ли значение.
313
+ * @param value value to check/ значение для проверки
314
+ */
315
+ protected isEdit(value?: Value): boolean {
316
+ return value !== undefined && anyToString(value) !== this.string.value
317
+ }
318
+ }
@@ -0,0 +1,21 @@
1
+ import { ref } from 'vue'
2
+
3
+ /**
4
+ * Class for working with data visualization. This is for working with the password type.
5
+ *
6
+ * Класс для работы с визуализацией данных. Это для работы с типом пароля.
7
+ */
8
+ export class FieldVisibilityInclude {
9
+ readonly item = ref<boolean>(false)
10
+
11
+ /**
12
+ * Toggles the values.
13
+ *
14
+ * Переключает значения.
15
+ */
16
+ toggle(): this {
17
+ this.item.value = !this.item.value
18
+
19
+ return this
20
+ }
21
+ }
@@ -0,0 +1,73 @@
1
+ import { computed, type Ref, type ToRefs } from 'vue'
2
+ import { type ConstrEmit, DesignComp, isFilled } from '@dxtmisha/functional'
3
+
4
+ import { LabelNumberInclude } from '../../classes/LabelNumberInclude'
5
+ import { IconInclude } from '../Icon'
6
+
7
+ import type { BadgeComponents, BadgeEmits, BadgeSlots } from './types'
8
+ import type { BadgeProps } from './props'
9
+
10
+ /**
11
+ * The Badge class implements a badge constructor with icon support and auto-hide logic.
12
+ *
13
+ * Класс Badge реализует конструктор бейджа с поддержкой иконок и авто-скрытия.
14
+ */
15
+ export class Badge {
16
+ readonly label: LabelNumberInclude
17
+ readonly icon: IconInclude
18
+
19
+ /**
20
+ * Constructor
21
+ * @param props input data/ входные данные
22
+ * @param refs input data in the form of reactive elements/ входные данные в виде реактивных элементов
23
+ * @param element input element/ элемент ввода
24
+ * @param classDesign design name/ название дизайна
25
+ * @param className class name/ название класса
26
+ * @param components object for working with components/ объект для работы с компонентами
27
+ * @param slots object for working with slots/ объект для работы со слотами
28
+ * @param emits the function is called when an event is triggered/ функция вызывается, когда срабатывает событие
29
+ */
30
+ constructor(
31
+ protected readonly props: BadgeProps,
32
+ protected readonly refs: ToRefs<BadgeProps>,
33
+ protected readonly element: Ref<HTMLElement | undefined>,
34
+ protected readonly classDesign: string,
35
+ protected readonly className: string,
36
+ protected readonly components?: DesignComp<BadgeComponents, BadgeProps>,
37
+ protected readonly slots?: BadgeSlots,
38
+ protected readonly emits?: ConstrEmit<BadgeEmits>
39
+ ) {
40
+ this.label = new LabelNumberInclude(
41
+ props,
42
+ className,
43
+ undefined,
44
+ slots
45
+ )
46
+
47
+ this.icon = new IconInclude(
48
+ props,
49
+ className,
50
+ components
51
+ )
52
+ }
53
+
54
+ /**
55
+ * Computes if the badge should auto-hide when there is no dot, icon, or label.
56
+ *
57
+ * Вычисляет, должен ли бейдж автоматически скрываться, если нет точки, иконки и текста.
58
+ */
59
+ readonly autoHide = computed(
60
+ () => !this.props.dot
61
+ && !isFilled(this.icon.isIcon.value)
62
+ && !isFilled(this.label.is.value)
63
+ )
64
+
65
+ /**
66
+ * Classes for controlling badge visibility.
67
+ *
68
+ * Классы для управления видимостью бейджа.
69
+ */
70
+ readonly classes = computed(() => ({
71
+ [`${this.className}--hideAuto`]: this.autoHide.value
72
+ }))
73
+ }
@@ -0,0 +1,127 @@
1
+ import { h, type VNode } from 'vue'
2
+ import {
3
+ type ConstrOptions,
4
+ type ConstrStyles,
5
+ DesignConstructorAbstract
6
+ } from '@dxtmisha/functional'
7
+
8
+ import { Badge } from './Badge'
9
+
10
+ import {
11
+ type BadgePropsBasic
12
+ } from './props'
13
+ import {
14
+ type BadgeClasses,
15
+ type BadgeComponents,
16
+ type BadgeEmits,
17
+ type BadgeExpose,
18
+ type BadgeSlots
19
+ } from './types'
20
+
21
+ /**
22
+ * BadgeDesign
23
+ */
24
+ export class BadgeDesign<
25
+ COMP extends BadgeComponents,
26
+ EXPOSE extends BadgeExpose,
27
+ CLASSES extends BadgeClasses,
28
+ P extends BadgePropsBasic
29
+ > extends DesignConstructorAbstract<
30
+ HTMLDivElement,
31
+ COMP,
32
+ BadgeEmits,
33
+ EXPOSE,
34
+ BadgeSlots,
35
+ CLASSES,
36
+ P
37
+ > {
38
+ protected readonly item: Badge
39
+
40
+ /**
41
+ * Constructor
42
+ * @param name class name/ название класса
43
+ * @param props properties/ свойства
44
+ * @param options list of additional parameters/ список дополнительных параметров
45
+ */
46
+ constructor(
47
+ name: string,
48
+ props: Readonly<P>,
49
+ options?: ConstrOptions<COMP, BadgeEmits, P>
50
+ ) {
51
+ super(
52
+ name,
53
+ props,
54
+ options
55
+ )
56
+
57
+ this.item = new Badge(
58
+ this.props,
59
+ this.refs,
60
+ this.element,
61
+ this.getDesign(),
62
+ this.getName(),
63
+ this.components,
64
+ this.slots,
65
+ this.emits
66
+ )
67
+
68
+ this.init()
69
+ }
70
+
71
+ /**
72
+ * Initialization of all the necessary properties for work
73
+ *
74
+ * Инициализация всех необходимых свойств для работы.
75
+ */
76
+ protected initExpose(): EXPOSE {
77
+ return {} as EXPOSE
78
+ }
79
+
80
+ /**
81
+ * Improvement of the obtained list of classes.
82
+ *
83
+ * Доработка полученного списка классов.
84
+ */
85
+ protected initClasses(): Partial<CLASSES> {
86
+ return {
87
+ main: this.item.classes.value,
88
+ ...{
89
+ // :classes [!] System label / Системная метка
90
+ label: this.getSubClass('label'),
91
+ icon: this.getSubClass('icon')
92
+ // :classes [!] System label / Системная метка
93
+ }
94
+ } as Partial<CLASSES>
95
+ }
96
+
97
+ /**
98
+ * Refinement of the received list of styles.
99
+ *
100
+ * Доработка полученного списка стилей.
101
+ */
102
+ protected initStyles(): ConstrStyles {
103
+ return {}
104
+ }
105
+
106
+ /**
107
+ * A method for rendering.
108
+ *
109
+ * Метод для рендеринга.
110
+ */
111
+ protected initRender(): VNode {
112
+ const children: any[] = []
113
+
114
+ if (!this.props.dot) {
115
+ children.push(
116
+ ...this.item.label.render(),
117
+ ...this.item.icon.renderIcon()
118
+ )
119
+ }
120
+
121
+ return h('span', {
122
+ ...this.getAttrs(),
123
+ ref: this.element,
124
+ class: this.classes?.value.main
125
+ }, children)
126
+ }
127
+ }
@@ -0,0 +1,78 @@
1
+ import { computed, type VNode } from 'vue'
2
+ import { type ConstrBind, DesignComponents, getBind, getRef, type RefOrNormal, toBind } from '@dxtmisha/functional'
3
+
4
+ import type { BadgeComponentInclude, BadgePropsInclude } from './basicTypes'
5
+ import type { BadgeProps } from './props'
6
+
7
+ /**
8
+ * BadgeInclude class provides functionality for conditionally rendering badge components
9
+ * within other components. It manages the logic for determining when to display a badge
10
+ * and configures the appropriate properties.
11
+ *
12
+ * Класс BadgeInclude предоставляет функциональность для условного рендеринга компонентов
13
+ * бейджа внутри других компонентов. Он управляет логикой определения необходимости
14
+ * отображения бейджа и настраивает соответствующие свойства.
15
+ *
16
+ * @template Props - Properties interface extending BadgePropsInclude
17
+ */
18
+ export class BadgeInclude<Props extends BadgePropsInclude = BadgePropsInclude> {
19
+ /**
20
+ * Constructor
21
+ * @param props input parameter/ входной параметр
22
+ * @param className class name/ название класса
23
+ * @param components object for working with components/ объект для работы с компонентами
24
+ * @param extra additional parameter/ дополнительный параметр
25
+ */
26
+ constructor(
27
+ protected readonly props: Readonly<Props>,
28
+ protected readonly className: string,
29
+ protected readonly components?: DesignComponents<BadgeComponentInclude, Props>,
30
+ protected readonly extra?: RefOrNormal<ConstrBind<BadgeProps>>
31
+ ) {
32
+ }
33
+
34
+ /**
35
+ * Checks whether a badge is specified for rendering the component/
36
+ * Проверяет, указан ли бейдж для отображения компонента
37
+ */
38
+ readonly is = computed(() => Boolean(this.props.badge || this.props.badgeDot))
39
+
40
+ /**
41
+ * list of properties for the badge component/ список свойств для компонента бейджа
42
+ */
43
+ readonly binds = computed(() => getBind(
44
+ this.props.badgeDot ? {} : this.props.badge,
45
+ {
46
+ dot: this.props.badgeDot,
47
+ ...toBind(
48
+ getRef(this.extra) ?? {},
49
+ {
50
+ class: `${this.className}__badge`
51
+ }
52
+ )
53
+ },
54
+ 'label',
55
+ true
56
+ ))
57
+
58
+ /**
59
+ * Render of the badge component
60
+ *
61
+ * Рендер компонента бейджа
62
+ */
63
+ readonly render = (): VNode[] => {
64
+ if (
65
+ this.components
66
+ && this.is.value
67
+ ) {
68
+ return this.components.render(
69
+ 'badge',
70
+ this.binds.value,
71
+ undefined,
72
+ 'badge'
73
+ )
74
+ }
75
+
76
+ return []
77
+ }
78
+ }
@@ -0,0 +1,15 @@
1
+ import type { ConstrBind } from '@dxtmisha/functional'
2
+
3
+ import type { BadgePropsBasic } from './props'
4
+
5
+ export type BadgeComponentInclude = {
6
+ badge?: object
7
+ }
8
+
9
+ export interface BadgePropsInclude<
10
+ Badge extends BadgePropsBasic = BadgePropsBasic
11
+ > {
12
+ // Values
13
+ badge?: string | number | ConstrBind<Badge>
14
+ badgeDot?: boolean
15
+ }
@@ -0,0 +1,5 @@
1
+ export * from './Badge'
2
+ export * from './BadgeDesign'
3
+ export * from './props'
4
+ export * from './types'
5
+ export * from './basicTypes'
@@ -0,0 +1,36 @@
1
+ {
2
+ "padding": {
3
+ "_type": "var"
4
+ },
5
+ "dotSize": {
6
+ "_type": "var"
7
+ },
8
+ "transition-property": "clip-path, mask-image, mask-size, opacity, transform, scale",
9
+ "transition-duration": "{d.sys.transitionDuration.lg.open}",
10
+ "transition-function": "{d.sys.transitionFunction.standard}",
11
+ "#label": {},
12
+ "#icon": {},
13
+ "selected": {},
14
+ "~hide": {
15
+ "transition-duration": "{d.sys.transitionDuration.lg.close}"
16
+ },
17
+ "~dot": {},
18
+ "~overlap": {
19
+ "~rectangular": {},
20
+ "~circular": {},
21
+ "~static": {},
22
+ "_default": "rectangular"
23
+ },
24
+ "~vertical": {
25
+ "~top": {},
26
+ "~center": {},
27
+ "~bottom": {},
28
+ "_default": "top"
29
+ },
30
+ "~horizontal": {
31
+ "~right": {},
32
+ "~center": {},
33
+ "~left": {},
34
+ "_default": "right"
35
+ }
36
+ }