@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,104 @@
1
+ import { computed } from 'vue'
2
+ import { isArray, type Undefined } from '@dxtmisha/functional'
3
+
4
+ import type { ImageCoordinatorItem, ImageSize } from './basicTypes'
5
+ import type { ImageProps } from './props'
6
+
7
+ type ImageCoordinatorItemFull = [number, number, number, number]
8
+
9
+ /**
10
+ * A class for calculating the central part of the image by its coordinates.
11
+ *
12
+ * Класс для вычисления центральной части изображения по его координатам.
13
+ */
14
+ export class ImageCoordinator {
15
+ /**
16
+ * Constructor
17
+ * @param props input data/ входные данные
18
+ */
19
+ constructor(
20
+ protected readonly props: ImageProps
21
+ ) {
22
+ }
23
+
24
+ /**
25
+ * Returns coordinates.
26
+ *
27
+ * Возвращает координаты.
28
+ */
29
+ readonly coordinator = computed<ImageCoordinatorItemFull>(() => {
30
+ if (this.is()) {
31
+ const coordinator: number[] = this.props.coordinator
32
+
33
+ switch (coordinator.length) {
34
+ case 1:
35
+ return [
36
+ coordinator[0] ?? 0,
37
+ coordinator[0] ?? 0,
38
+ coordinator[0] ?? 0,
39
+ coordinator[0] ?? 0
40
+ ]
41
+ case 2:
42
+ return [
43
+ coordinator[0] ?? 0,
44
+ coordinator[1] ?? 0,
45
+ coordinator[0] ?? 0,
46
+ coordinator[1] ?? 0
47
+ ]
48
+
49
+ case 3:
50
+ return [
51
+ coordinator[0] ?? 0,
52
+ coordinator[1] ?? 0,
53
+ coordinator[2] ?? 0,
54
+ coordinator[1] ?? 0
55
+ ]
56
+ case 4:
57
+ return coordinator as ImageCoordinatorItemFull
58
+ }
59
+ }
60
+
61
+ return [0, 0, 0, 0]
62
+ })
63
+
64
+ /**
65
+ * Returns the sizes for the background-position property by coordinates.
66
+ *
67
+ * Возвращает размеры для свойства background-position по координатам.
68
+ */
69
+ readonly size = computed<ImageSize>(() => {
70
+ const coordinator = this.coordinator.value
71
+
72
+ return {
73
+ width: 100 - coordinator[1] - coordinator[3],
74
+ height: 100 - coordinator[2] - coordinator[0]
75
+ }
76
+ })
77
+
78
+ /**
79
+ * Checks if there are coordinates for calculation.
80
+ *
81
+ * Проверяет, есть ли координаты для вычисления.
82
+ */
83
+ is(): this is { coordinator: Exclude<ImageCoordinatorItem, Undefined> } {
84
+ const coordinator = this.props.coordinator
85
+
86
+ return isArray(coordinator)
87
+ && coordinator.length > 0
88
+ && coordinator.length < 5
89
+ }
90
+
91
+ /**
92
+ * Returns the values for the background property.
93
+ *
94
+ * Возвращает значения для свойства background.
95
+ */
96
+ getSize(): ImageSize<string> {
97
+ const item = this.size.value
98
+
99
+ return {
100
+ width: `${100 / item.width * 100}%`,
101
+ height: `${100 / item.height * 100}%`
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,99 @@
1
+ import { type Ref, ref, watchEffect } from 'vue'
2
+ import { Icons, isString, type Undefined } from '@dxtmisha/functional'
3
+
4
+ import { ImageFile } from './ImageFile'
5
+ import { ImagePdf } from './ImagePdf'
6
+
7
+ import { ImageType } from './ImageType'
8
+
9
+ import { type ImageEventItem, type ImageItem, ImageTypeValue } from './basicTypes'
10
+ import { type ImageProps } from './props'
11
+
12
+ /**
13
+ * A class for obtaining image or icon data.
14
+ *
15
+ * Класс для получения данных изображения или иконки.
16
+ */
17
+ export class ImageData {
18
+ /**
19
+ * Returns images.
20
+ *
21
+ * Возвращает изображения.
22
+ */
23
+ readonly image = ref<ImageEventItem>()
24
+
25
+ /**
26
+ * Constructor
27
+ * @param props input data/ входные данные
28
+ * @param type image type/ тип изображения
29
+ */
30
+ constructor(
31
+ protected readonly props: ImageProps,
32
+ protected readonly type: ImageType
33
+ ) {
34
+ watchEffect(async () => {
35
+ this.image.value = await this.init()
36
+ })
37
+ }
38
+
39
+ /**
40
+ * Checks if there are values.
41
+ *
42
+ * Проверяет, есть ли значения.
43
+ */
44
+ is(): this is { image: Exclude<ImageEventItem, Undefined> } {
45
+ return this.image.value !== undefined
46
+ }
47
+
48
+ /**
49
+ * Checks if the value is a link, that is, a type of string.
50
+ *
51
+ * Проверяет, является ли значение ссылкой, то есть видом строки.
52
+ */
53
+ isLink(): this is { image: Ref<string> } {
54
+ return this.is() && typeof this.image.value === 'string'
55
+ }
56
+
57
+ /**
58
+ * Checks if the value is an image object.
59
+ *
60
+ * Проверяет, является ли значение объектом изображения.
61
+ */
62
+ isImage(): this is { image: Ref<ImageItem> } {
63
+ return this.is() && typeof this.image.value !== 'string'
64
+ }
65
+
66
+ /**
67
+ * Calculates the image value and returns it.
68
+ *
69
+ * Вычисляет значение изображения и возвращает его.
70
+ */
71
+ protected async init(): Promise<ImageEventItem> {
72
+ const image = this.props.value
73
+
74
+ if (image) {
75
+ switch (this.type.item.value) {
76
+ case ImageTypeValue.pdf:
77
+ return await ImagePdf.get(image)
78
+ case ImageTypeValue.image:
79
+ case ImageTypeValue.file:
80
+ try {
81
+ return await ImageFile.createImage(image)
82
+ } catch {
83
+ console.error('ImageData.initImage: ', image)
84
+ }
85
+ break
86
+ case ImageTypeValue.public:
87
+ case ImageTypeValue.icon:
88
+ case ImageTypeValue.flag:
89
+ if (isString(image)) {
90
+ return await Icons.get(image, this.props.url)
91
+ }
92
+
93
+ break
94
+ }
95
+ }
96
+
97
+ return undefined
98
+ }
99
+ }
@@ -0,0 +1,137 @@
1
+ import { h, type VNode } from 'vue'
2
+ import {
3
+ type ConstrOptions,
4
+ type ConstrStyles,
5
+ DesignConstructorAbstract
6
+ } from '@dxtmisha/functional'
7
+
8
+ import { Image } from './Image'
9
+
10
+ import { ImageTypeValue } from './basicTypes'
11
+ import {
12
+ type ImagePropsBasic
13
+ } from './props'
14
+ import {
15
+ type ImageClasses,
16
+ type ImageComponents,
17
+ type ImageEmits,
18
+ type ImageExpose,
19
+ type ImageSlots
20
+ } from './types'
21
+
22
+ /**
23
+ * ImageDesign
24
+ */
25
+ export class ImageDesign<
26
+ COMP extends ImageComponents,
27
+ EXPOSE extends ImageExpose,
28
+ CLASSES extends ImageClasses,
29
+ P extends ImagePropsBasic
30
+ > extends DesignConstructorAbstract<
31
+ HTMLDivElement,
32
+ COMP,
33
+ ImageEmits,
34
+ EXPOSE,
35
+ ImageSlots,
36
+ CLASSES,
37
+ P
38
+ > {
39
+ protected readonly item: Image
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, ImageEmits, P>
51
+ ) {
52
+ super(
53
+ name,
54
+ props,
55
+ options
56
+ )
57
+
58
+ this.item = new Image(
59
+ this.props,
60
+ this.element,
61
+ this.getName(),
62
+ this.emits
63
+ )
64
+
65
+ this.init()
66
+ }
67
+
68
+ /**
69
+ * Initialization of all the necessary properties for work
70
+ *
71
+ * Инициализация всех необходимых свойств для работы.
72
+ */
73
+ protected initExpose(): EXPOSE {
74
+ return {
75
+ type: this.item.type.item,
76
+ data: this.item.data.image
77
+ } 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
+ // :classes [!] System label / Системная метка
91
+ }
92
+ } as Partial<CLASSES>
93
+ }
94
+
95
+ /**
96
+ * Refinement of the received list of styles.
97
+ *
98
+ * Доработка полученного списка стилей.
99
+ */
100
+ protected initStyles(): ConstrStyles {
101
+ return this.item.styles.value
102
+ }
103
+
104
+ /**
105
+ * A method for rendering.
106
+ *
107
+ * Метод для рендеринга.
108
+ */
109
+ protected initRender(): VNode {
110
+ return h(
111
+ 'span',
112
+ {
113
+ ...this.getAttrs(),
114
+ ref: this.element,
115
+ class: this.classes?.value.main,
116
+ style: this.styles?.value,
117
+ translate: 'no'
118
+ },
119
+ this.renderValue()
120
+ )
121
+ }
122
+
123
+ /**
124
+ * Rendering the value for the component.
125
+ *
126
+ * Рендеринг значения для компонента.
127
+ */
128
+ readonly renderValue = (): string | VNode[] | undefined => {
129
+ if (
130
+ this.item.type.item.value === ImageTypeValue.pdf
131
+ ) {
132
+ return [h('object', { data: this.item.data.image.value })]
133
+ }
134
+
135
+ return this.item.text.value
136
+ }
137
+ }
@@ -0,0 +1,137 @@
1
+ import type { ImageItem } from './basicTypes'
2
+ import { isDomRuntime } from '@dxtmisha/functional'
3
+
4
+ /**
5
+ * Maximum size allowed without conversion.
6
+ *
7
+ * Максимальный размер, допустимый без преобразования.
8
+ */
9
+ export const MAX_SIZE: number = 1280
10
+
11
+ /**
12
+ * Class for working with uploaded images.
13
+ *
14
+ * Класс для работы с загруженными изображениями.
15
+ */
16
+ export class ImageFile {
17
+ /**
18
+ * Checks if the file is an image.
19
+ *
20
+ * Проверяет, является ли файл изображением.
21
+ * @param file verified file/ проверяемый файл
22
+ */
23
+ static isImage(file: File): boolean {
24
+ return Boolean(file.type.match(/^image\//))
25
+ }
26
+
27
+ /**
28
+ * Creates an image based on a file or a link.
29
+ *
30
+ * Создает изображение на основе файла или ссылки.
31
+ * @param src file or link/ файл или ссылка
32
+ */
33
+ static createImage(src: string | File): Promise<ImageItem | undefined> {
34
+ return new Promise((resolve) => {
35
+ if (src) {
36
+ const image = new Image()
37
+
38
+ image.onerror = () => resolve(undefined)
39
+ image.onload = () => {
40
+ resolve({
41
+ image,
42
+ src: this.getSRC(image, src),
43
+ width: image.naturalWidth,
44
+ height: image.naturalHeight
45
+ })
46
+ }
47
+
48
+ (async () => {
49
+ image.src = src instanceof File ? await this.getFileResult(src) : src
50
+ })()
51
+ } else {
52
+ resolve(undefined)
53
+ }
54
+ })
55
+ }
56
+
57
+ /**
58
+ * Returns a link to the image.
59
+ *
60
+ * Возвращает ссылку на изображение.
61
+ * @param src file or link/ файл или ссылка
62
+ */
63
+ static async getPath(src: string | File): Promise<string> {
64
+ return this.createImage(src).then(item => item?.src ?? '')
65
+ }
66
+
67
+ /**
68
+ * Applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer.
69
+ *
70
+ * Асинхронно читать содержимое файлов (или буферы данных), хранящиеся на компьютере пользователя.
71
+ * @param file the Blob or File from which to read/ Blob или File которые следует прочитать
72
+ */
73
+ static getFileResult(file: File): Promise<string> {
74
+ return new Promise((resolve) => {
75
+ if (this.isImage(file)) {
76
+ this.getFileReader(file).then(result => resolve(result))
77
+ } else {
78
+ resolve('')
79
+ }
80
+ })
81
+ }
82
+
83
+ /**
84
+ * Applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer.
85
+ *
86
+ * Асинхронно читать содержимое файлов (или буферы данных), хранящиеся на компьютере пользователя.
87
+ * @param file the Blob or File from which to read/ Blob или File которые следует прочитать
88
+ */
89
+ static getFileReader(file: File): Promise<string> {
90
+ return new Promise((resolve) => {
91
+ const reader = new FileReader()
92
+ reader.onload = () => resolve(typeof reader.result === 'string' ? reader.result : '')
93
+ reader.readAsDataURL(file)
94
+ })
95
+ }
96
+
97
+ /**
98
+ * Image size adaptation. Checks if the image size is larger than maxSize, reduces it to maxSize.
99
+ *
100
+ * Адаптация размера изображения. Проверяет, если размер изображения больше maxSize, уменьшает его до maxSize.
101
+ * @param image image element/ элемент изображения
102
+ * @param src link to image/ ссылка на изображение
103
+ * @param maxSize maximum allowable image size/ максимальный допустимый размер изображения
104
+ */
105
+ protected static getSRC(
106
+ image: HTMLImageElement,
107
+ src?: string | File,
108
+ maxSize = MAX_SIZE as number
109
+ ): string {
110
+ if (
111
+ isDomRuntime()
112
+ && (
113
+ src instanceof File
114
+ || src === undefined
115
+ )
116
+ && (
117
+ image.naturalHeight > maxSize
118
+ || image.naturalWidth > maxSize
119
+ )
120
+ ) {
121
+ const is = image.naturalWidth >= image.naturalHeight
122
+ const canvas = document.createElement('canvas')?.getContext('2d')
123
+
124
+ if (canvas) {
125
+ canvas.canvas.width = is ? maxSize : (image.naturalWidth / image.naturalHeight * maxSize)
126
+ canvas.canvas.height = is ? (image.naturalHeight / image.naturalWidth * maxSize) : maxSize
127
+ canvas.drawImage(image, 0, 0, canvas.canvas.width, canvas.canvas.height)
128
+
129
+ return canvas.canvas.toDataURL()
130
+ } else {
131
+ return ''
132
+ }
133
+ } else {
134
+ return image.src
135
+ }
136
+ }
137
+ }
@@ -0,0 +1,53 @@
1
+ import { computed, type VNode } from 'vue'
2
+ import { type ConstrEmit, DesignComponents, getBind, getRef, type RefOrNormal } from '@dxtmisha/functional'
3
+
4
+ import type { ImageEventData, ImageComponentsInclude, ImageEmitsInclude, ImagePropsInclude } from './basicTypes'
5
+
6
+ /**
7
+ * Класс для подключения и работы с компонентом изображения.
8
+ *
9
+ * A class for connecting to and working with the image component.
10
+ */
11
+ export class ImageInclude {
12
+ /**
13
+ * Constructor for working with images.
14
+ *
15
+ * Конструктор для работы с изображениями.
16
+ * @param props input parameter/ входной параметр
17
+ * @param components object for working with components/ объект для работы с компонентами
18
+ * @param emits the function is called when an event is triggered/ функция вызывается, когда срабатывает событие
19
+ * @param extra additional parameter/ дополнительный параметр
20
+ */
21
+ constructor(
22
+ protected readonly props: ImagePropsInclude,
23
+ protected readonly components?: DesignComponents<ImageComponentsInclude, ImagePropsInclude>,
24
+ protected readonly emits?: ConstrEmit<ImageEmitsInclude>,
25
+ protected readonly extra?: RefOrNormal<Record<string, any>>
26
+ ) {
27
+ }
28
+
29
+ /**
30
+ * Проверяет, есть ли изображение/ Checks if an image exists
31
+ */
32
+ readonly isImage = computed<boolean>(() => Boolean(this.props.image))
33
+
34
+ /**
35
+ * Возвращает данные для передачи компоненту/ Returns data to pass to the component
36
+ */
37
+ readonly bind = computed(() => getBind(this.props.image, getRef(this.extra), 'value'))
38
+
39
+ render(): VNode[] {
40
+ if (
41
+ this.components
42
+ && this.isImage.value
43
+ ) {
44
+ return this.components.render('image', this.bind.value)
45
+ }
46
+
47
+ return []
48
+ }
49
+
50
+ onLoad(event: ImageEventData) {
51
+ this.emits?.('load', event)
52
+ }
53
+ }
@@ -0,0 +1,44 @@
1
+ import { isString } from '@dxtmisha/functional'
2
+
3
+ import { ImageFile } from './ImageFile'
4
+
5
+ const IMAGE_PDF_TOOL = '#toolbar=0&scrollbar=1'
6
+
7
+ /**
8
+ * Class for working with PDF files.
9
+ *
10
+ * Класс для работы с PDF-файлами.
11
+ */
12
+ export class ImagePdf {
13
+ /**
14
+ * Checks if the file is an image.
15
+ *
16
+ * Проверяет, является ли файл PDF.
17
+ * @param file verified file/ проверяемый файл
18
+ */
19
+ static isPdf(file: string | File): boolean {
20
+ if (isString(file)) {
21
+ return Boolean(file.match(/\.pdf$/i))
22
+ }
23
+
24
+ return Boolean(file.type.match(/\/pdf$/i))
25
+ }
26
+
27
+ /**
28
+ * Applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer.
29
+ *
30
+ * Асинхронно читать содержимое файлов (или буферы данных), хранящиеся на компьютере пользователя.
31
+ * @param file the Blob or File from which to read/ Blob или File которые следует прочитать
32
+ */
33
+ static async get(file: string | File): Promise<string> {
34
+ if (isString(file)) {
35
+ return `${file}${IMAGE_PDF_TOOL}`
36
+ }
37
+
38
+ if (this.isPdf(file)) {
39
+ return `${(await ImageFile.getFileReader(file))}${IMAGE_PDF_TOOL}`
40
+ }
41
+
42
+ return ''
43
+ }
44
+ }
@@ -0,0 +1,49 @@
1
+ import { computed } from 'vue'
2
+
3
+ import { ImageCoordinator } from './ImageCoordinator'
4
+
5
+ import type { ImageProps } from './props'
6
+
7
+ /**
8
+ * A class for obtaining data for the background-position property.
9
+ *
10
+ * Класс для получения данных для свойства background-position.
11
+ */
12
+ export class ImagePosition {
13
+ /**
14
+ * Constructor
15
+ * @param props input data/ входные данные
16
+ * @param coordinator coordinates for margins/ координаты для отступов
17
+ */
18
+ constructor(
19
+ protected readonly props: ImageProps,
20
+ protected readonly coordinator: ImageCoordinator
21
+ ) {
22
+ }
23
+
24
+ /**
25
+ * Returns the position on the left.
26
+ *
27
+ * Возвращает позицию слева.
28
+ */
29
+ readonly x = computed<string>(() => {
30
+ if (this.coordinator.is()) {
31
+ return `${this.coordinator.coordinator.value[3] + (this.coordinator.size.value.width / 2)}%`
32
+ }
33
+
34
+ return this.props.x?.toString() || 'center'
35
+ })
36
+
37
+ /**
38
+ * Returns the position on the top.
39
+ *
40
+ * Возвращает позицию сверху.
41
+ */
42
+ readonly y = computed<string>(() => {
43
+ if (this.coordinator.is()) {
44
+ return `${this.coordinator.coordinator.value[0] + (this.coordinator.size.value.height / 2)}%`
45
+ }
46
+
47
+ return this.props.y?.toString() || 'center'
48
+ })
49
+ }
@@ -0,0 +1,83 @@
1
+ import { computed } from 'vue'
2
+ import { GEO_FLAG_ICON_NAME, Icons, isFilled } from '@dxtmisha/functional'
3
+
4
+ import { ImagePdf } from './ImagePdf'
5
+
6
+ import { type ImageTypeItem, ImageTypeValue } from './basicTypes'
7
+ import type { ImageProps } from './props'
8
+
9
+ /**
10
+ * Class for working with the image type.
11
+ *
12
+ * Класс для работы с типом изображения.
13
+ */
14
+ export class ImageType {
15
+ /**
16
+ * Constructor
17
+ * @param props input data/ входные данные
18
+ */
19
+ constructor(
20
+ protected readonly props: ImageProps
21
+ ) {
22
+ }
23
+
24
+ /**
25
+ * Get the image type.
26
+ *
27
+ * Получения тип изображения.
28
+ */
29
+ readonly item = computed<ImageTypeItem>(() => {
30
+ const image = this.props.value
31
+
32
+ if (
33
+ image instanceof File
34
+ || isFilled(image)
35
+ ) {
36
+ if (ImagePdf.isPdf(image)) {
37
+ return ImageTypeValue.pdf
38
+ }
39
+
40
+ if (image instanceof File) {
41
+ return ImageTypeValue.file
42
+ }
43
+
44
+ if (image.match(/\//)) {
45
+ return ImageTypeValue.image
46
+ }
47
+
48
+ if (image.match(GEO_FLAG_ICON_NAME)) {
49
+ return ImageTypeValue.icon
50
+ }
51
+
52
+ if (image.match(/^#/)) {
53
+ return ImageTypeValue.color
54
+ }
55
+
56
+ if (image.match(/^@/)) {
57
+ return ImageTypeValue.public
58
+ }
59
+
60
+ if (image.match(/^\$/)) {
61
+ return ImageTypeValue.material
62
+ }
63
+
64
+ if (image.match(/^flag-[a-z]{2}$/)) {
65
+ return ImageTypeValue.flag
66
+ }
67
+
68
+ const sub = image.match(/^(outlined|round|sharp|material)-/)
69
+
70
+ if (sub) {
71
+ return sub[1] as ImageTypeItem
72
+ }
73
+
74
+ if (Icons.is(image)) {
75
+ return ImageTypeValue.public
76
+ }
77
+
78
+ return ImageTypeValue.outlined
79
+ }
80
+
81
+ return undefined
82
+ })
83
+ }