@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,372 @@
1
+ import { computed, h, type VNode } from 'vue'
2
+ import {
3
+ type ConstrOptions,
4
+ type ConstrStyles,
5
+ DesignConstructorAbstract,
6
+ isString
7
+ } from '@dxtmisha/functional'
8
+
9
+ import { Field } from './Field'
10
+
11
+ import {
12
+ type FieldPropsBasic
13
+ } from './props'
14
+ import {
15
+ type FieldClasses,
16
+ type FieldComponents,
17
+ type FieldEmits,
18
+ type FieldExpose,
19
+ type FieldSlots
20
+ } from './types'
21
+
22
+ /**
23
+ * FieldDesign
24
+ */
25
+ export class FieldDesign<
26
+ COMP extends FieldComponents,
27
+ EXPOSE extends FieldExpose,
28
+ CLASSES extends FieldClasses,
29
+ P extends FieldPropsBasic
30
+ > extends DesignConstructorAbstract<
31
+ HTMLLabelElement,
32
+ COMP,
33
+ FieldEmits,
34
+ EXPOSE,
35
+ FieldSlots,
36
+ CLASSES,
37
+ P
38
+ > {
39
+ protected readonly item: Field
40
+
41
+ /**
42
+ * Constructor
43
+ * @param name class name/ название класса
44
+ * @param props properties/ свойства
45
+ * @param options list of additional parameters/ список дополнительных параметров
46
+ */
47
+ constructor(
48
+ name: string,
49
+ props: Readonly<P>,
50
+ options?: ConstrOptions<COMP, FieldEmits, P>
51
+ ) {
52
+ super(
53
+ name,
54
+ props,
55
+ options
56
+ )
57
+
58
+ this.item = new Field(
59
+ this.props,
60
+ this.refs,
61
+ this.element,
62
+ this.getDesign(),
63
+ this.getName(),
64
+ this.components,
65
+ this.slots,
66
+ this.emits
67
+ )
68
+
69
+ this.init()
70
+ }
71
+
72
+ /**
73
+ * Initialization of all the necessary properties for work
74
+ *
75
+ * Инициализация всех необходимых свойств для работы.
76
+ */
77
+ protected initExpose(): EXPOSE {
78
+ return {} as EXPOSE
79
+ }
80
+
81
+ /**
82
+ * Improvement of the obtained list of classes.
83
+ *
84
+ * Доработка полученного списка классов.
85
+ */
86
+ protected initClasses(): Partial<CLASSES> {
87
+ return {
88
+ main: this.item.classes.value,
89
+ ...{
90
+ // :classes [!] System label / Системная метка
91
+ body: this.getSubClass('body'),
92
+ bodyInput: this.getSubClass('body__input'),
93
+ bodyTitle: this.getSubClass('body__title'),
94
+ bodyTitleLabel: this.getSubClass('body__title__label'),
95
+ bodyTitleLabelText: this.getSubClass('body__title__label__text'),
96
+ bodyScoreboard: this.getSubClass('body__scoreboard'),
97
+ bodyScoreboardLeft: this.getSubClass('body__scoreboard__left'),
98
+ bodyScoreboardRight: this.getSubClass('body__scoreboard__right'),
99
+ bodyScoreboardSpace: this.getSubClass('body__scoreboard__space'),
100
+ bodyScoreboardInput: this.getSubClass('body__scoreboard__input'),
101
+ bodyBorder: this.getSubClass('body__border'),
102
+ required: this.getSubClass('required')
103
+ // :classes [!] System label / Системная метка
104
+ }
105
+ } as Partial<CLASSES>
106
+ }
107
+
108
+ /**
109
+ * Refinement of the received list of styles.
110
+ *
111
+ * Доработка полученного списка стилей.
112
+ */
113
+ protected initStyles(): ConstrStyles {
114
+ return {}
115
+ }
116
+
117
+ /**
118
+ * A method for rendering.
119
+ *
120
+ * Метод для рендеринга.
121
+ */
122
+ protected initRender(): VNode {
123
+ const children: any[] = []
124
+
125
+ if (
126
+ (this.props as any).classic
127
+ && !(this.props as any).basic
128
+ && !(this.props as any).boxed
129
+ && !(this.props as any).filled
130
+ && !(this.props as any).outlined
131
+ && !(this.props as any).tonal
132
+ ) {
133
+ children.push(...this.item.fieldLabel.render())
134
+ }
135
+
136
+ children.push(
137
+ ...this.renderBody(),
138
+ ...this.item.fieldMessage.render()
139
+ )
140
+
141
+ return h(
142
+ 'label',
143
+ {
144
+ ...this.getAttrs(),
145
+ ref: this.element,
146
+ class: this.classes?.value.main,
147
+ style: this.styles?.value
148
+ },
149
+ children
150
+ )
151
+ }
152
+
153
+ /**
154
+ * Generates body.
155
+ *
156
+ * Генерирует тело.
157
+ */
158
+ readonly renderBody = (): VNode[] => {
159
+ const children: any[] = [
160
+ this.initSlot('default', undefined, this.item.getControl()),
161
+ this.renderBodyLabel(),
162
+ this.renderBodyScoreboard(),
163
+ this.renderBodyBorder()
164
+ ]
165
+
166
+ return [
167
+ h(
168
+ 'span',
169
+ {
170
+ class: [
171
+ this.classes?.value.body,
172
+ this.item.skeleton.classes.value
173
+ ],
174
+ onClick: this.item.event.onClick
175
+ },
176
+ children
177
+ )
178
+ ]
179
+ }
180
+
181
+ /**
182
+ * Generates data for the title.
183
+ *
184
+ * Генерирует данные для заголовка.
185
+ */
186
+ readonly renderBodyLabel = (): VNode => {
187
+ const children: any[] = [
188
+ this.props.label
189
+ ]
190
+
191
+ if (this.props.required) {
192
+ children.push(h(
193
+ 'span',
194
+ { class: this.classes?.value.required }
195
+ ))
196
+ }
197
+
198
+ return h(
199
+ 'span',
200
+ { class: this.classes?.value.bodyTitle },
201
+ h(
202
+ 'span',
203
+ { class: this.classes?.value.bodyTitleLabel },
204
+ h(
205
+ 'span',
206
+ { class: this.classes?.value.bodyTitleLabelText },
207
+ children
208
+ )
209
+ )
210
+ )
211
+ }
212
+
213
+ /**
214
+ * Generates data for additional controls.
215
+ *
216
+ * Генерирует данные для дополнительных управлений.
217
+ */
218
+ readonly renderBodyScoreboard = (): VNode => {
219
+ const children: any[] = [
220
+ ...this.renderBodyScoreboardSlot(),
221
+ ...this.renderBodyScoreboardIcon(),
222
+ ...this.item.prefix.render(),
223
+ ...this.item.suffix.render(),
224
+ ...this.item.progress.render(),
225
+ ...this.renderBodyScoreboardSpace()
226
+ ]
227
+
228
+ return h('span', {
229
+ 'class': this.classes?.value.bodyScoreboard,
230
+ 'data-element': 'scoreboard'
231
+ }, children)
232
+ }
233
+
234
+ /**
235
+ * Generates data for the slot.
236
+ *
237
+ * Генерирует данные для слота.
238
+ */
239
+ readonly renderBodyScoreboardSlot = (): VNode[] => {
240
+ const slots: any[] = []
241
+
242
+ if (this.slots) {
243
+ if ('leading' in this.slots) {
244
+ slots.push(h(
245
+ 'span',
246
+ { class: this.classes?.value.bodyScoreboardLeft },
247
+ this.initSlot('leading')
248
+ ))
249
+ }
250
+
251
+ if ('trailing' in this.slots) {
252
+ slots.push(h(
253
+ 'span',
254
+ { class: this.classes?.value.bodyScoreboardRight },
255
+ this.initSlot('trailing')
256
+ ))
257
+ }
258
+ }
259
+
260
+ return slots
261
+ }
262
+
263
+ /**
264
+ * Generates all available icons.
265
+ *
266
+ * Генерирует все доступные иконки.
267
+ */
268
+ readonly renderBodyScoreboardIcon = (): VNode[] => {
269
+ const icons: any[] = [...this.item.icon.render()]
270
+
271
+ if (this.item.icons.isCancel.value) {
272
+ this.components.renderAdd(
273
+ icons,
274
+ 'icon',
275
+ this.item.icons.cancelBind.value,
276
+ undefined,
277
+ 'cancel'
278
+ )
279
+ }
280
+
281
+ if (this.item.icons.isArrow.value) {
282
+ this.components.renderAdd(
283
+ icons,
284
+ 'icon',
285
+ this.item.icons.previousBind.value,
286
+ undefined,
287
+ 'previous'
288
+ )
289
+
290
+ this.components.renderAdd(
291
+ icons,
292
+ 'icon',
293
+ this.item.icons.nextBind.value,
294
+ undefined,
295
+ 'next'
296
+ )
297
+ }
298
+
299
+ return icons
300
+ }
301
+
302
+ /**
303
+ * Generates separators and additional descriptions.
304
+ *
305
+ * Генерирует разделители и дополнительные описания.
306
+ */
307
+ readonly renderBodyScoreboardSpace = (): VNode[] => {
308
+ const children: any[] = []
309
+
310
+ if (this.item.caption.is.value) {
311
+ children.push(
312
+ h(
313
+ 'span',
314
+ { class: this.classes?.value.bodyScoreboardInput },
315
+ this.focusValue.value
316
+ ),
317
+ ...this.item.caption.render()
318
+ )
319
+ }
320
+
321
+ return [
322
+ h(
323
+ 'span',
324
+ { class: this.classes?.value.bodyScoreboardSpace },
325
+ children
326
+ )
327
+ ]
328
+ }
329
+
330
+ /**
331
+ * Generates border.
332
+ *
333
+ * Генерирует border.
334
+ */
335
+ readonly renderBodyBorder = (): VNode => {
336
+ return h('span', { class: this.classes?.value.bodyBorder })
337
+ }
338
+
339
+ /**
340
+ * Value for focus.
341
+ *
342
+ * Значение для фокуса.
343
+ */
344
+ protected readonly focusValue = computed(() => {
345
+ if (isString(this.props.value)) {
346
+ return this.props.value
347
+ }
348
+
349
+ const item = this.lengthElement.value ?? this.inputElement.value
350
+ return item?.nodeName === 'INPUT' ? item.value.toString() : item?.innerText.replace(/[\r\n]+/ig, '').trim()
351
+ })
352
+
353
+ /**
354
+ * Element for counting characters.
355
+ *
356
+ * Элемент для подсчёта символов.
357
+ */
358
+ protected readonly lengthElement = computed<HTMLInputElement | undefined>(() => {
359
+ return this.element.value
360
+ ?.querySelector<HTMLInputElement>(`.${this.classes?.value.bodyInput} [data-length]`) ?? undefined
361
+ })
362
+
363
+ /**
364
+ * Input element.
365
+ *
366
+ * Элемент ввода.
367
+ */
368
+ protected readonly inputElement = computed<HTMLInputElement | undefined>(() => {
369
+ return this.element.value
370
+ ?.querySelector<HTMLInputElement>(`input.${this.classes?.value.bodyInput}, .${this.classes?.value.bodyInput} input`) ?? undefined
371
+ })
372
+ }
@@ -0,0 +1,99 @@
1
+ import { computed } from 'vue'
2
+ import type { ConstrBind } from '@dxtmisha/functional'
3
+
4
+ import type { IconProps } from '../Icon'
5
+ import type { FieldProps } from './props'
6
+
7
+ /**
8
+ * Class for displaying an icon for arrow control.
9
+ *
10
+ * Класс для вывода иконки для управления стрелками.
11
+ */
12
+ export class FieldIcons {
13
+ /**
14
+ * Constructor
15
+ * @param props input data/ входные данные
16
+ * @param className class name/ название класса
17
+ */
18
+ constructor(
19
+ protected readonly props: FieldProps,
20
+ protected readonly className: string
21
+ ) {
22
+ }
23
+
24
+ /**
25
+ * Determines whether to display arrows.
26
+ *
27
+ * Определяет, требуется ли отображение стрелок.
28
+ */
29
+ readonly isArrow = computed<boolean>(
30
+ () => Boolean(
31
+ (
32
+ this.props.arrowCarousel
33
+ || this.props.arrowStepper
34
+ )
35
+ && !this.props.disabled
36
+ )
37
+ )
38
+
39
+ /**
40
+ * Determines whether to display the "Delete" button.
41
+ *
42
+ * Определяет, требуется ли отображение кнопки "Удалить".
43
+ */
44
+ readonly isCancel = computed<boolean>(() => Boolean(
45
+ this.props.cancel
46
+ && !this.props.readonly
47
+ && !this.props.disabled
48
+ && !this.props.arrowCarousel
49
+ && !this.props.arrowStepper
50
+ && (
51
+ (this.props.cancel === 'auto' && this.props.cancelShow)
52
+ || this.props.cancel === 'always'
53
+ )
54
+ ))
55
+
56
+ /**
57
+ * Returns data for the data deletion button.
58
+ *
59
+ * Возвращает данные для кнопки удаления данных.
60
+ */
61
+ readonly cancelBind = computed<ConstrBind<IconProps>>(() => {
62
+ return {
63
+ 'class': `${this.className}__cancel`,
64
+ 'icon': this.props.iconClose,
65
+ 'dynamic': true,
66
+ 'data-event-type': 'cancel'
67
+ }
68
+ })
69
+
70
+ /**
71
+ * Returns data for the left arrow.
72
+ *
73
+ * Возвращает данные для стрелки слева.
74
+ */
75
+ readonly previousBind = computed<ConstrBind<IconProps>>(() => {
76
+ return {
77
+ 'class': `${this.className}__previous`,
78
+ 'icon': this.props.arrowCarousel ? this.props.iconArrowLeft : this.props.iconMinus,
79
+ 'disabled': this.props.disabled || this.props.disabledPrevious,
80
+ 'dynamic': true,
81
+ 'data-event-type': 'previous'
82
+ }
83
+ })
84
+
85
+ /**
86
+ * Returns data for the right arrow.
87
+ *
88
+ * Возвращает данные для стрелки справа.
89
+ */
90
+ readonly nextBind = computed<ConstrBind<IconProps>>(() => {
91
+ return {
92
+ 'class': `${this.className}__next`,
93
+ 'icon': this.props.arrowCarousel ? this.props.iconArrowRight : this.props.iconPlus,
94
+ 'disabled': this.props.disabled || this.props.disabledNext,
95
+ 'dynamic': true,
96
+ 'data-event-type': 'next'
97
+ }
98
+ })
99
+ }
@@ -0,0 +1,72 @@
1
+ import { computed } from 'vue'
2
+ import { type ConstrBind, type RefOrNormal, toBinds, getRef } from '@dxtmisha/functional'
3
+
4
+ import type { FieldPropsInclude } from './basicTypes'
5
+ import type { FieldPropsBasic } from './props'
6
+
7
+ /**
8
+ * The class returns data for working with the Field framework.
9
+ *
10
+ * Класс возвращает данные для работы с каркасом поля.
11
+ */
12
+ export class FieldInclude<
13
+ Props extends FieldPropsInclude = FieldPropsInclude,
14
+ PropsExtra extends ConstrBind<FieldPropsBasic> = ConstrBind<FieldPropsBasic>
15
+ > {
16
+ constructor(
17
+ protected readonly props: Readonly<Props>,
18
+ protected readonly extra?: RefOrNormal<PropsExtra>
19
+ ) {
20
+ }
21
+
22
+ /** Returns properties for the field framework/ Возвращает свойства для каркаса поля */
23
+ readonly binds = computed<PropsExtra>(
24
+ () => toBinds<PropsExtra>(
25
+ getRef(this.extra),
26
+ {
27
+ // Status
28
+ focus: this.props.focus,
29
+ selected: this.props.selected,
30
+ readonly: this.props.readonly,
31
+ disabled: this.props.disabled,
32
+
33
+ loading: this.props.loading,
34
+ forceShowMessage: this.props.forceShowMessage,
35
+
36
+ // Value
37
+ label: this.props.label,
38
+ prefix: this.props.prefix,
39
+ suffix: this.props.suffix,
40
+ caption: this.props.caption,
41
+ helperMessage: this.props.helperMessage,
42
+ validationMessage: this.props.validationMessage,
43
+
44
+ required: this.props.required,
45
+
46
+ detail: this.props.detail,
47
+
48
+ // Style
49
+ cancel: this.props.cancel,
50
+ counterShow: this.props.counterShow,
51
+
52
+ icon: this.props.icon,
53
+ iconTurn: this.props.iconTurn,
54
+ iconHide: this.props.iconHide,
55
+ iconDir: this.props.iconDir,
56
+ iconPalette: this.props.iconPalette,
57
+ iconTrailing: this.props.iconTrailing,
58
+ iconTrailingTurnOnly: this.props.iconTrailingTurnOnly,
59
+ iconTrailingDirOnly: this.props.iconTrailingDirOnly,
60
+ iconTrailingPalette: this.props.iconTrailingPalette,
61
+ iconAttrs: this.props.iconAttrs,
62
+
63
+ isSkeleton: this.props.isSkeleton,
64
+
65
+ fieldLabelAttrs: this.props.fieldLabelAttrs,
66
+ fieldMessageAttrs: this.props.fieldMessageAttrs,
67
+ fieldCounterAttrs: this.props.fieldCounterAttrs
68
+ },
69
+ this.props.fieldAttrs
70
+ )
71
+ )
72
+ }
@@ -0,0 +1,93 @@
1
+ import { onMounted, onUnmounted, onUpdated, type Ref, watch } from 'vue'
2
+ import { EventItem, isDomRuntime } from '@dxtmisha/functional'
3
+
4
+ /**
5
+ * Input field margin control class.
6
+ *
7
+ * Класс управления отступами для элемента ввода.
8
+ */
9
+ export class FieldSize {
10
+ protected left: number = 0
11
+ protected right: number = 0
12
+ protected title: number = 0
13
+
14
+ protected event?: EventItem<Window, Event>
15
+
16
+ /**
17
+ * Constructor
18
+ * @param element main element/ главный элемент
19
+ * @param className class name/ название класса
20
+ */
21
+ constructor(
22
+ protected readonly element: Ref<HTMLLabelElement | undefined>,
23
+ protected readonly className: string
24
+ ) {
25
+ watch(element, () => this.update, { immediate: true })
26
+
27
+ if (isDomRuntime()) {
28
+ this.event = new EventItem(window, 'resize', this.update)
29
+ onUnmounted(() => this.event?.stop())
30
+ }
31
+
32
+ onMounted(this.update)
33
+ onUpdated(this.update)
34
+ }
35
+
36
+ /**
37
+ * Update margins.
38
+ *
39
+ * Обновление отступов.
40
+ */
41
+ readonly update = () => {
42
+ requestAnimationFrame(() => {
43
+ const elementSpace = this.getElementSpace()
44
+ const elementPrefix = this.getElementPrefix()
45
+
46
+ if (elementSpace) {
47
+ this.left = elementSpace.offsetLeft
48
+ this.right = (elementSpace.parentElement?.offsetWidth ?? 0) - this.left - elementSpace.offsetWidth
49
+ }
50
+
51
+ this.title = elementPrefix?.offsetLeft ?? elementSpace?.offsetLeft ?? 0
52
+
53
+ this.make()
54
+ })
55
+ }
56
+
57
+ /**
58
+ * Returns separator elements.
59
+ *
60
+ * Возвращает элементы-разделители.
61
+ */
62
+ protected getElementSpace(): HTMLDivElement | undefined {
63
+ return this.element.value?.querySelector(`.${this.className}__body__scoreboard__space`) ?? undefined
64
+ }
65
+
66
+ /**
67
+ * Returns element with prefix.
68
+ *
69
+ * Возвращает элемент с префиксом.
70
+ */
71
+ protected getElementPrefix(): HTMLDivElement | undefined {
72
+ return this.element.value?.querySelector(`.${this.className}__prefix`) ?? undefined
73
+ }
74
+
75
+ /**
76
+ * Update input field margins.
77
+ *
78
+ * Обновление отступов для поля ввода.
79
+ */
80
+ protected make() {
81
+ const element = this.element.value
82
+
83
+ if (element) {
84
+ element.style.setProperty(`--${this.className}-sys-left`, `${this.left}px`)
85
+ element.style.setProperty(`--${this.className}-sys-right`, `${this.right}px`)
86
+ element.style.setProperty(`--${this.className}-sys-title`, `${this.title}px`)
87
+
88
+ if (!element.classList.contains(`${this.className}--show`)) {
89
+ requestAnimationFrame(() => element.classList.add(`${this.className}--show`))
90
+ }
91
+ }
92
+ }
93
+ }