@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,244 @@
1
+ import { h, type VNode } from 'vue'
2
+ import {
3
+ type ConstrOptions,
4
+ type ConstrStyles,
5
+ DesignConstructorAbstract,
6
+ type RawSlots,
7
+ toBinds
8
+ } from '@dxtmisha/functional'
9
+
10
+ import { Menu } from './Menu'
11
+
12
+ import type { WindowControlItem } from '../Window'
13
+ import type { MenuControlItem } from './basicTypes'
14
+ import {
15
+ type MenuPropsBasic
16
+ } from './props'
17
+ import {
18
+ type MenuClasses,
19
+ type MenuComponents,
20
+ type MenuEmits,
21
+ type MenuExpose,
22
+ type MenuSlots
23
+ } from './types'
24
+
25
+ /**
26
+ * MenuDesign
27
+ */
28
+ export class MenuDesign<
29
+ COMP extends MenuComponents,
30
+ EXPOSE extends MenuExpose,
31
+ CLASSES extends MenuClasses,
32
+ P extends MenuPropsBasic
33
+ > extends DesignConstructorAbstract<
34
+ HTMLDivElement,
35
+ COMP,
36
+ MenuEmits,
37
+ EXPOSE,
38
+ MenuSlots,
39
+ CLASSES,
40
+ P
41
+ > {
42
+ protected readonly item: Menu
43
+
44
+ /**
45
+ * Constructor
46
+ * @param name class name/ название класса
47
+ * @param props properties/ свойства
48
+ * @param options list of additional parameters/ список дополнительных параметров
49
+ */
50
+ constructor(
51
+ name: string,
52
+ props: Readonly<P>,
53
+ options?: ConstrOptions<COMP, MenuEmits, P>
54
+ ) {
55
+ super(
56
+ name,
57
+ props,
58
+ options
59
+ )
60
+
61
+ this.item = new Menu(
62
+ this.props,
63
+ this.refs,
64
+ this.element,
65
+ this.getDesign(),
66
+ this.getName(),
67
+ this.components,
68
+ this.slots,
69
+ this.emits
70
+ )
71
+
72
+ this.init()
73
+ }
74
+
75
+ /**
76
+ * Initialization of all the necessary properties for work
77
+ *
78
+ * Инициализация всех необходимых свойств для работы.
79
+ */
80
+ protected initExpose(): EXPOSE {
81
+ return {
82
+ ...this.item.window.expose,
83
+ ...this.item.getControlBinds()
84
+ } as EXPOSE
85
+ }
86
+
87
+ /**
88
+ * Improvement of the obtained list of classes.
89
+ *
90
+ * Доработка полученного списка классов.
91
+ */
92
+ protected initClasses(): Partial<CLASSES> {
93
+ return {
94
+ main: {},
95
+ ...{
96
+ // :classes [!] System label / Системная метка
97
+ bars: this.getSubClass('bars'),
98
+ list: this.getSubClass('list')
99
+ // :classes [!] System label / Системная метка
100
+ }
101
+ } as Partial<CLASSES>
102
+ }
103
+
104
+ /**
105
+ * Refinement of the received list of styles.
106
+ *
107
+ * Доработка полученного списка стилей.
108
+ */
109
+ protected initStyles(): ConstrStyles {
110
+ return {}
111
+ }
112
+
113
+ /**
114
+ * A method for rendering.
115
+ *
116
+ * Метод для рендеринга.
117
+ */
118
+ protected initRender(): VNode[] {
119
+ return this.item.window.render(
120
+ {
121
+ control: this.renderControl,
122
+ title: this.renderTitle,
123
+ default: this.renderList,
124
+ footer: this.renderFooter
125
+ },
126
+ {
127
+ class: this.classes?.value.main
128
+ }
129
+ )
130
+ }
131
+
132
+ /**
133
+ * Generates data for control.
134
+ *
135
+ * Генерирует данные для контроля.
136
+ * @param props data for the transferable property/ данные для передаваемого свойства
137
+ */
138
+ readonly renderControl = (
139
+ props: WindowControlItem
140
+ ): VNode | undefined => {
141
+ return this.initSlot('control', undefined, this.getBinds(props))
142
+ }
143
+
144
+ /**
145
+ * Render title element.
146
+ *
147
+ * Рендер элемента заголовка.
148
+ * @param props data for the transferable property/ данные для передаваемого свойства
149
+ */
150
+ readonly renderTitle = (
151
+ props: WindowControlItem
152
+ ): VNode[] => {
153
+ const children: any[] = []
154
+ if (this.item.bars.is.value) {
155
+ children.push(...this.item.bars.render())
156
+ console.log('this.item.bars.is.value', children)
157
+ }
158
+
159
+ this.initSlot('title', children, this.getBinds(props))
160
+
161
+ return children
162
+ }
163
+
164
+ /**
165
+ * Render list element.
166
+ *
167
+ * Рендер элемента списка.
168
+ * @param props data for the transferable property/ данные для передаваемого свойства
169
+ */
170
+ readonly renderList = (
171
+ props: WindowControlItem
172
+ ): VNode | undefined => {
173
+ const list = this.item.request.item.value
174
+
175
+ if (list) {
176
+ const children: any[] = []
177
+
178
+ this.initSlot('contextTop', children, this.getBinds(props))
179
+
180
+ if (!this.props.hideList) {
181
+ children.push(
182
+ this.components.render(
183
+ 'list',
184
+ toBinds(
185
+ {
186
+ ...this.item.binds.value,
187
+ class: this.classes?.value.list,
188
+
189
+ selected: this.item.value.selected.value,
190
+ highlight: this.item.search.item.value,
191
+
192
+ list,
193
+ lite: this.item.menuWindow.lite.value
194
+ },
195
+ this.props.listAttrs
196
+ ),
197
+ this.slots as RawSlots
198
+ )
199
+ )
200
+ }
201
+
202
+ this.initSlot('contextBottom', children, this.getBinds(props))
203
+
204
+ return h(
205
+ 'div',
206
+ {
207
+ ...this.getAttrs(),
208
+ ref: this.element,
209
+ onClick: this.item.onClickSlot
210
+ },
211
+ children
212
+ )
213
+ }
214
+
215
+ return undefined
216
+ }
217
+
218
+ /**
219
+ * Render footer element.
220
+ *
221
+ * Рендер элемента футера.
222
+ * @param props data for the transferable property/ данные для передаваемого свойства
223
+ */
224
+ readonly renderFooter = (
225
+ props: WindowControlItem
226
+ ): VNode | undefined => {
227
+ return this.initSlot('footer', undefined, this.getBinds(props))
228
+ }
229
+
230
+ /**
231
+ * Generates data for control.
232
+ *
233
+ * Генерирует данные для контроля.
234
+ * @param props data for the transferable property/ данные для передаваемого свойства
235
+ */
236
+ protected getBinds(
237
+ props: WindowControlItem
238
+ ): MenuControlItem {
239
+ return {
240
+ ...props,
241
+ ...this.item.getControlBinds()
242
+ }
243
+ }
244
+ }
@@ -0,0 +1,110 @@
1
+ import { computed, ref, type VNode } from 'vue'
2
+ import {
3
+ type ConstrBind,
4
+ DesignComponents,
5
+ getRef,
6
+ type RawSlots,
7
+ type RefOrNormal,
8
+ toBind
9
+ } from '@dxtmisha/functional'
10
+
11
+ import type { MenuComponentInclude, MenuExposeInclude, MenuPropsInclude } from './basicTypes'
12
+ import type { MenuExpose, MenuSlots } from './types'
13
+ import type { MenuProps } from './props'
14
+
15
+ /**
16
+ * MenuInclude class provides functionality for conditionally rendering menu components
17
+ * within other components. It manages the logic for determining when to display menu
18
+ * and configures the appropriate properties.
19
+ *
20
+ * Класс MenuInclude предоставляет функциональность для условного рендеринга компонентов
21
+ * меню внутри других компонентов. Он управляет логикой определения необходимости
22
+ * отображения меню и настраивает соответствующие свойства.
23
+ */
24
+ export class MenuInclude<
25
+ Props extends MenuPropsInclude = MenuPropsInclude,
26
+ PropsExtra extends ConstrBind<MenuProps> = ConstrBind<MenuProps>
27
+ > {
28
+ /** Reference to menu element/ Ссылка на элемент меню */
29
+ protected readonly element = ref<ConstrBind<MenuExpose> | undefined>()
30
+
31
+ /**
32
+ * Constructor
33
+ * @param props input parameter/ входной параметр
34
+ * @param className class name/ название класса
35
+ * @param components object for working with components/ объект для работы с компонентами
36
+ * @param extra additional parameter or property name/ дополнительный параметр или имя свойства
37
+ * @param index index identifier/ идентификатор индекса
38
+ */
39
+ constructor(
40
+ protected readonly props: Readonly<Props>,
41
+ protected readonly className: string,
42
+ protected readonly components?: DesignComponents<MenuComponentInclude, Props>,
43
+ protected readonly extra?: RefOrNormal<PropsExtra>,
44
+ protected readonly index?: string
45
+ ) {
46
+ }
47
+
48
+ /**
49
+ * Checks whether menu should be displayed/
50
+ * Проверяет, нужно ли отображать меню
51
+ */
52
+ readonly is = computed(() => Boolean(!this.props.disabled && this.components))
53
+
54
+ /** Computed bindings for the menu/ Вычисляемые привязки для меню */
55
+ readonly binds = computed<PropsExtra>(() => {
56
+ const props = toBind<PropsExtra>(
57
+ toBind(
58
+ getRef(this.extra) ?? {},
59
+ this.props.menuAttrs ?? {}
60
+ ),
61
+ { class: `${this.className}__menu` }
62
+ )
63
+
64
+ return {
65
+ ...props,
66
+ disabled: this.props.disabled
67
+ }
68
+ })
69
+
70
+ /** Menu expose functionality/ Функциональность экспорта меню */
71
+ readonly expose: MenuExposeInclude = {
72
+ open: computed(() => Boolean(this.element.value?.open)),
73
+ setOpen: async (open: boolean) => this.element.value?.setOpen(open),
74
+ toOpen: async () => this.element.value?.toOpen(),
75
+ toClose: async () => this.element.value?.toClose(),
76
+ toggle: async () => this.element.value?.toggle(),
77
+
78
+ menuElement: this.element
79
+ }
80
+
81
+ /**
82
+ * Render the Menu component
83
+ *
84
+ * Рендер компонента меню
85
+ * @param slotsChildren menu slots/ слоты меню
86
+ * @param attrs additional attributes/ дополнительные атрибуты
87
+ * @returns VNode array/ массив VNode
88
+ */
89
+ readonly render = (
90
+ slotsChildren?: MenuSlots,
91
+ attrs?: Record<string, any>
92
+ ): VNode[] => {
93
+ if (this.components && this.is.value) {
94
+ return this.components.render(
95
+ 'menu',
96
+ {
97
+ ref: this.element,
98
+ ...toBind(
99
+ attrs ?? {},
100
+ this.binds.value
101
+ )
102
+ },
103
+ slotsChildren as RawSlots,
104
+ this.index
105
+ )
106
+ }
107
+
108
+ return []
109
+ }
110
+ }
@@ -0,0 +1,101 @@
1
+ import { computed, ref } from 'vue'
2
+ import { Api, executePromise, isFunction, type ListRecord } from '@dxtmisha/functional'
3
+
4
+ import type { MenuProps } from './props'
5
+
6
+ /**
7
+ * Class for working with list data requests.
8
+ *
9
+ * Класс для работы с запросами данных списка.
10
+ */
11
+ export class MenuRequest {
12
+ readonly progress = ref<boolean>(false)
13
+
14
+ protected readonly buffer = ref<ListRecord>()
15
+
16
+ /**
17
+ * Constructor
18
+ * @param props input data/ входные данные
19
+ */
20
+ constructor(
21
+ protected readonly props: MenuProps
22
+ ) {
23
+ }
24
+
25
+ /**
26
+ * Returns current list data.
27
+ *
28
+ * Возвращает текущие данные списка.
29
+ */
30
+ readonly item = computed(() => this.buffer.value ?? this.props.list ?? [])
31
+
32
+ /**
33
+ * Checks whether a request is needed.
34
+ *
35
+ * Проверяет, нужно ли делать запрос.
36
+ */
37
+ is(): boolean {
38
+ return Boolean(
39
+ this.props.ajax
40
+ || this.props.request
41
+ )
42
+ }
43
+
44
+ /**
45
+ * Prepares data.
46
+ *
47
+ * Подготавливает данные.
48
+ */
49
+ async preparation(): Promise<boolean> {
50
+ await this.update()
51
+
52
+ return true
53
+ }
54
+
55
+ /**
56
+ * Updates data.
57
+ *
58
+ * Обновляет данные.
59
+ */
60
+ async update(): Promise<void> {
61
+ await this.read(data => (this.buffer.value = data))
62
+ }
63
+
64
+ /**
65
+ * Returns data from AJAX or request function.
66
+ *
67
+ * Возвращает данные из AJAX или функции запроса.
68
+ */
69
+ protected async getAjax(): Promise<ListRecord | undefined> {
70
+ if (isFunction(this.props.ajax)) {
71
+ return executePromise(this.props.ajax)
72
+ }
73
+
74
+ return await Api.request<Record<string, any>>({
75
+ path: this.props.ajax,
76
+ ...this.props.request
77
+ })
78
+ }
79
+
80
+ /**
81
+ * Executes a request to retrieve data.
82
+ *
83
+ * Выполняет запрос для получения данных.
84
+ */
85
+ protected async read(callback: (data: ListRecord | undefined) => void): Promise<void> {
86
+ if (this.is()) {
87
+ if (
88
+ this.props.cache
89
+ && this.buffer.value !== undefined
90
+ ) {
91
+ callback(this.buffer.value)
92
+ }
93
+
94
+ this.progress.value = true
95
+
96
+ callback(await this.getAjax())
97
+
98
+ this.progress.value = false
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,49 @@
1
+ import { ref } from 'vue'
2
+ import { isFilled } from '@dxtmisha/functional'
3
+
4
+ /**
5
+ * Class for working with search.
6
+ *
7
+ * Класс для работы с поиском.
8
+ */
9
+ export class MenuSearch {
10
+ readonly item = ref<string>()
11
+
12
+ /**
13
+ * Sets the search string.
14
+ *
15
+ * Устанавливает строку поиска.
16
+ * @param value new value/ новое значение
17
+ */
18
+ set(value?: string) {
19
+ const data = this.getValue(value)
20
+
21
+ if (this.item.value !== data) {
22
+ this.item.value = data
23
+ }
24
+ }
25
+
26
+ /**
27
+ * Resets the search string.
28
+ *
29
+ * Сбрасывает строку поиска.
30
+ */
31
+ reset(): this {
32
+ this.set()
33
+ return this
34
+ }
35
+
36
+ /**
37
+ * Returns a processed value.
38
+ *
39
+ * Возвращает обработанное значение.
40
+ * @param value source value/ исходное значение
41
+ */
42
+ protected getValue(value?: string): string | undefined {
43
+ if (isFilled(value)) {
44
+ return value.trim()
45
+ }
46
+
47
+ return undefined
48
+ }
49
+ }
@@ -0,0 +1,73 @@
1
+ import { computed, ref, type ToRefs, watch } from 'vue'
2
+ import { type ConstrEmit, isObject, type ListSelectedList } from '@dxtmisha/functional'
3
+
4
+ import { ModelInclude } from '../../classes/ModelInclude'
5
+
6
+ import type { MenuEmits } from './types'
7
+ import type { MenuProps } from './props'
8
+
9
+ /**
10
+ * Value manager for Menu
11
+ *
12
+ * Менеджер значения для Menu
13
+ */
14
+ export class MenuValue {
15
+ readonly value = ref<ListSelectedList>()
16
+
17
+ /**
18
+ * Constructor
19
+ * @param props input data/ входные данные
20
+ * @param refs input data in the form of reactive elements/ входные данные в виде реактивных элементов
21
+ * @param emits the function is called when an event is triggered/ функция вызывается, когда срабатывает событие
22
+ */
23
+ constructor(
24
+ protected readonly props: MenuProps,
25
+ protected readonly refs: ToRefs<MenuProps>,
26
+ protected readonly emits?: ConstrEmit<MenuEmits>
27
+ ) {
28
+ if (this.props.isSelectedByValue) {
29
+ new ModelInclude('value', this.emits, this.value)
30
+
31
+ if (refs.selected) {
32
+ watch(
33
+ refs.selected,
34
+ (value) => {
35
+ this.value.value = value
36
+ },
37
+ { immediate: true }
38
+ )
39
+ }
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Computed selected value
45
+ *
46
+ * Вычисляемое выбранное значение
47
+ */
48
+ readonly selected = computed(() => {
49
+ if (this.props.isSelectedByValue) {
50
+ return this.value.value
51
+ }
52
+
53
+ return this.props.selected
54
+ })
55
+
56
+ /**
57
+ * Sets a new selected value if it has changed and returns the instance for chaining.
58
+ *
59
+ * Устанавливает новое выбранное значение, если оно изменилось, и возвращает экземпляр для чейнинга.
60
+ * @param value selected list value/ выбранное значение списка
61
+ * @returns this
62
+ */
63
+ setValue(value: ListSelectedList): this {
64
+ if (
65
+ this.props.isSelectedByValue
66
+ && !isObject(value)
67
+ && this.value.value !== value
68
+ ) {
69
+ this.value.value = value
70
+ }
71
+ return this
72
+ }
73
+ }
@@ -0,0 +1,89 @@
1
+ import { ref } from 'vue'
2
+
3
+ import { MenuRequest } from './MenuRequest'
4
+
5
+ import type { WindowProps } from '../Window'
6
+ import type { MenuProps } from './props'
7
+
8
+ /**
9
+ * Window manager for Menu component
10
+ *
11
+ * Класс управления окном для компонента Menu
12
+ */
13
+ export class MenuWindow {
14
+ readonly lite = ref<boolean>()
15
+ readonly control = ref<boolean>()
16
+
17
+ /**
18
+ * Constructor
19
+ * @param props input data/ входные данные
20
+ * @param request menu request handler/ обработчик запросов меню
21
+ */
22
+ constructor(
23
+ protected readonly props: MenuProps,
24
+ protected readonly request: MenuRequest
25
+ ) {
26
+ }
27
+
28
+ /**
29
+ * Returns extra methods for window management
30
+ *
31
+ * Возвращает дополнительные методы для управления окном
32
+ * @returns object with window management methods/ объект с методами управления окном
33
+ */
34
+ getExtra(): WindowProps {
35
+ return {
36
+ adaptive: 'menu',
37
+ preparation: this.preparation,
38
+ opening: this.opening,
39
+ closing: this.closing
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Preparing data before opening the menu
45
+ *
46
+ * Подготовка данных перед открытием меню
47
+ * @returns Promise that resolves to true when preparation is complete/
48
+ * Promise, который разрешается в true после завершения подготовки
49
+ */
50
+ protected readonly preparation = async (): Promise<void> => {
51
+ await this.request.preparation()
52
+
53
+ if (
54
+ this.props.list
55
+ && this.props.liteThreshold
56
+ && Number(this.props.liteThreshold) <= Object.keys(this.props.list).length
57
+ ) {
58
+ this.lite.value = true
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Actions performed after opening the window
64
+ *
65
+ * Действия, выполняемые после открытия окна
66
+ * @returns Promise that resolves to true when opening actions are complete/
67
+ * Promise, который разрешается в true после завершения действий открытия
68
+ */
69
+ protected readonly opening = async (): Promise<boolean> => {
70
+ this.lite.value = false
71
+ this.control.value = true
72
+
73
+ return true
74
+ }
75
+
76
+ /**
77
+ * Actions performed when closing the window
78
+ *
79
+ * Действия, выполняемые при закрытии окна
80
+ * @returns Promise that resolves to true when closing actions are complete/
81
+ * Promise, который разрешается в true после завершения действий закрытия
82
+ */
83
+ protected readonly closing = async (): Promise<boolean> => {
84
+ this.lite.value = false
85
+ this.control.value = false
86
+
87
+ return true
88
+ }
89
+ }
@@ -0,0 +1,41 @@
1
+ import type { ComputedRef, Ref } from 'vue'
2
+ import type { ConstrBind } from '@dxtmisha/functional'
3
+ import type { WindowControlItem } from '../Window'
4
+
5
+ import type { ListExpose } from '../List'
6
+ import type { MenuExpose } from './types'
7
+ import type { MenuProps } from './props'
8
+
9
+ export type MenuControlBasic
10
+ = ListExpose
11
+ & {
12
+ loading: Ref<boolean>
13
+ }
14
+
15
+ export type MenuControlItem
16
+ = MenuControlBasic
17
+ & WindowControlItem
18
+
19
+ export type MenuComponentInclude = {
20
+ menu?: object
21
+ }
22
+
23
+ /** Type for menu expose functionality/ Тип для функциональности экспорта меню */
24
+ export interface MenuExposeInclude {
25
+ open: ComputedRef<boolean>
26
+
27
+ setOpen(open: boolean): Promise<void>
28
+
29
+ toOpen: MenuExpose['toOpen']
30
+ toClose: MenuExpose['toClose']
31
+
32
+ toggle(): Promise<void>
33
+
34
+ menuElement: Ref<ConstrBind<MenuExpose> | undefined>
35
+ }
36
+
37
+ /** Interface for menu include props/ Интерфейс для свойств включения меню */
38
+ export interface MenuPropsInclude {
39
+ disabled?: boolean
40
+ menuAttrs?: ConstrBind<MenuProps>
41
+ }