@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,287 @@
1
+ import { isDomRuntime, isFilled } from '@dxtmisha/functional'
2
+
3
+ import { WindowPersistent } from './WindowPersistent'
4
+ import { WindowClasses } from './WindowClasses'
5
+ import { WindowElement } from './WindowElement'
6
+ import { WindowStatic } from './WindowStatic'
7
+ import { WindowOpen } from './WindowOpen'
8
+
9
+ import type { WindowProps } from './props'
10
+
11
+ /**
12
+ * Class for managing the opening and closing of the window.
13
+ *
14
+ * Класс для управления открытием и закрытием окна.
15
+ */
16
+ export class WindowVerification {
17
+ protected target?: HTMLElement
18
+ protected focus?: HTMLElement
19
+
20
+ /**
21
+ * Constructor
22
+ * @param props input data/ входные данные
23
+ * @param persistent object for working with the animation before turning off the window/ объект для работы с анимацией перед выключением окна
24
+ * @param classes an object for working with classes and searching for elements/ объект для работы с классами и поиском элементов
25
+ * @param element an object of the class for working with elements/ объект класса для работы с элементами
26
+ * @param staticMode class object for working with static status/ объект класса для работы со статическим статусом
27
+ * @param open the class object for working with the status of closing or opening the window/ объект класса для работы со статусом закрытия или открытия окна
28
+ */
29
+
30
+ constructor(
31
+ protected readonly props: WindowProps,
32
+ protected readonly persistent: WindowPersistent,
33
+ protected readonly classes: WindowClasses,
34
+ protected readonly element: WindowElement,
35
+ protected readonly staticMode: WindowStatic,
36
+ protected readonly open: WindowOpen
37
+ ) {
38
+ }
39
+
40
+ /**
41
+ * Updates the window opening status.
42
+ *
43
+ * Обновления статус открытия окно.
44
+ * @param target the selected window/ выбранное окно
45
+ */
46
+ async update(target: HTMLElement): Promise<void> {
47
+ if (this.open.isClicks()) {
48
+ return
49
+ }
50
+
51
+ this.target = target
52
+ this.focus = this.getFocus()
53
+
54
+ if (!isDomRuntime()) {
55
+ return
56
+ }
57
+
58
+ this.open.pressed()
59
+
60
+ if (!this.isTargetInBody()) {
61
+ return
62
+ }
63
+
64
+ if (this.staticMode.item.value) {
65
+ return
66
+ }
67
+
68
+ if (this.open.item.value) {
69
+ if (
70
+ this.isOpenOnly()
71
+ || this.isBlockOther()
72
+ ) {
73
+ return
74
+ } else if (this.isContextmenu()) {
75
+ await this.open
76
+ .reset()
77
+ .watchPosition()
78
+ } else if (!isFilled(this.focus)) {
79
+ await this.open.toggle()
80
+ } else if (!this.isFocus()) {
81
+ if (this.isNotBlock()) {
82
+ if (this.isChildren()) {
83
+ setTimeout(() => {
84
+ requestAnimationFrame(async () => {
85
+ if (
86
+ ['open', 'flash'].indexOf(this.focus?.dataset.status || '') === -1
87
+ && this.isMenu()
88
+ ) {
89
+ await this.open.toggle()
90
+ }
91
+ })
92
+ }, 40)
93
+ } else {
94
+ await this.open.toggle()
95
+ }
96
+ }
97
+ } else if (this.isTarget()) {
98
+ if (this.isNotBlockChildren()) {
99
+ if (!this.persistent.on()) {
100
+ await this.open.toggle()
101
+ }
102
+ }
103
+ } else if (
104
+ this.isClose()
105
+ || this.isAutoClose()
106
+ || !this.isChildren()
107
+ ) {
108
+ await this.open.toggle()
109
+ }
110
+ } else if (this.isEnabled()) {
111
+ await this.open.toggle()
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Returns the element in focus.
117
+ *
118
+ * Возвращает элемент в фокусе.
119
+ */
120
+ getFocus() {
121
+ return this.classes.findMain(this.getTarget())
122
+ }
123
+
124
+ protected getTarget<R extends HTMLElement>(): R {
125
+ return (this.target ?? this.element.getMain() ?? document.body) as R
126
+ }
127
+
128
+ /**
129
+ * Checks if the selected element is in focus.
130
+ *
131
+ * Проверяет, находится ли выбранный элемент в фокусе.
132
+ */
133
+ protected isFocus(): boolean {
134
+ return this.element.getMain() === this.focus
135
+ }
136
+
137
+ /**
138
+ * Checks if the target element is the window itself.
139
+ *
140
+ * Проверяет, является ли элемент-цель самим окном.
141
+ */
142
+ protected isTarget(): boolean {
143
+ return this.element.getMain() === this.target
144
+ }
145
+
146
+ protected isTargetInBody(): boolean {
147
+ return Boolean(this.target?.closest('body'))
148
+ }
149
+
150
+ /**
151
+ * Checks if the selected window is under other windows.
152
+ *
153
+ * Проверяет, находится ли выбранное окно под другими окнами.
154
+ * @param target the selected window/ выбранное окно
155
+ */
156
+ protected isChildren(
157
+ target: HTMLElement = this.getTarget()
158
+ ): boolean {
159
+ const focus = this.classes.findMain(target)
160
+
161
+ if (focus) {
162
+ if (focus.dataset.window === this.classes.getId()) {
163
+ return true
164
+ }
165
+
166
+ const control = this.classes.findControlByElement(focus)
167
+
168
+ if (control) {
169
+ return this.isChildren(control)
170
+ }
171
+ }
172
+
173
+ return false
174
+ }
175
+
176
+ /**
177
+ * Checks if the window is enabled or if the conditions for opening the window are met.
178
+ *
179
+ * Проверяет, включено ли окно или подходят ли условия для открытия окна.
180
+ */
181
+ protected isEnabled(): boolean {
182
+ return !this.props.disabled
183
+ && !this.getTarget().closest(`.${this.classes.list.controlStatic}`)
184
+ }
185
+
186
+ /**
187
+ * Checks if the window needs to be closed automatically.
188
+ *
189
+ * Проверяет, нужно ли автоматически закрывать окно.
190
+ */
191
+ protected isAutoClose(): boolean {
192
+ return Boolean(this.props.autoClose)
193
+ && !this.getTarget()
194
+ .closest(`.${this.classes.list.static}, .${this.classes.getId()} .${this.classes.list.control}`)
195
+ }
196
+
197
+ /**
198
+ * Checks if the change of the opening status of the window is blocked.
199
+ *
200
+ * Проверяет, заблокировано ли изменение статуса открытия окна.
201
+ */
202
+ protected isNotBlock(): boolean {
203
+ return this.isNotBlockItem(this.focus)
204
+ }
205
+
206
+ /**
207
+ * Checks if the change of the opening status of the window is blocked.
208
+ *
209
+ * Проверяет, заблокировано ли изменение статуса открытия окна.
210
+ * @param item element for testing/ элемент для проверки
211
+ */
212
+ protected isNotBlockItem(item?: HTMLElement): boolean {
213
+ const target = this.getTarget()
214
+
215
+ return (!this.isMenu(target) || !this.classes.isWindow(target))
216
+ && !this.classes.findControlByElement(item)?.closest(`.${this.classes.list.block}`)
217
+ }
218
+
219
+ /**
220
+ * Checks if there is an element with a close lock.
221
+ *
222
+ * Проверяет, есть ли элемент с блокировкой закрытия.
223
+ */
224
+ protected isNotBlockChildren(): boolean {
225
+ return !this.classes.findBody()?.querySelector(`.${this.classes.list.blockChildren}`)
226
+ && !this.classes.findBody()?.querySelector('[data-window-open="open"]')
227
+ }
228
+
229
+ /**
230
+ * Checks if there is a blocking element from other windows.
231
+ *
232
+ * Проверяет, есть ли блокирующий элемент от других окон.
233
+ */
234
+ protected isBlockOther(): boolean {
235
+ return Boolean(this.classes.findBodyOther(`.${this.classes.list.blockOther}`))
236
+ }
237
+
238
+ /**
239
+ * Checks if it needs to be opened when the right button is pressed.
240
+ *
241
+ * Проверяет, нужно ли открывать при нажатии правой кнопки.
242
+ */
243
+ protected isContextmenu(): boolean {
244
+ return Boolean(
245
+ this.props.contextmenu
246
+ && this.getTarget().closest(this.classes.getSelectorControl())
247
+ )
248
+ }
249
+
250
+ /**
251
+ * Checks if the window can be closed.
252
+ *
253
+ * Проверяет, можно ли закрыть окно.
254
+ */
255
+ protected isClose(): boolean {
256
+ return Boolean(
257
+ this.getTarget()
258
+ .closest(`.${this.classes.list.close}:not(.${this.classes.list.static})`)
259
+ )
260
+ }
261
+
262
+ /**
263
+ * Checks if the element is a menu.
264
+ *
265
+ * Проверяет, является ли элемент меню.
266
+ */
267
+ protected isMenu(element: HTMLElement | undefined = this.element.getMain()): boolean {
268
+ if (element) {
269
+ const style = getComputedStyle(element)
270
+ return style.content === '"--MENU--"' || style.content === '"--MENU-WINDOW--"'
271
+ }
272
+
273
+ return false
274
+ }
275
+
276
+ /**
277
+ * Checks if the element should only open.
278
+ *
279
+ * Проверяет, должен ли элемент только открываться.
280
+ */
281
+ protected isOpenOnly() {
282
+ return Boolean(
283
+ this.getTarget()
284
+ .closest(`.${this.classes.list.controlOpenOnly}`)
285
+ )
286
+ }
287
+ }
@@ -0,0 +1,186 @@
1
+ import type { ComputedRef, Ref } from 'vue'
2
+ import type { ConstrBind } from '@dxtmisha/functional'
3
+
4
+ import type { WindowExpose } from './types'
5
+ import type { WindowPropsBasic } from './props'
6
+
7
+ /**
8
+ * Window status items for different states of window lifecycle/
9
+ * Элементы статуса окна для различных состояний жизненного цикла окна
10
+ */
11
+ export enum WindowStatusItem {
12
+ /** Display state/ Состояние отображения */
13
+ display = 'display',
14
+ /** Preparation state/ Состояние подготовки */
15
+ preparation = 'preparation',
16
+ /** Flash state/ Состояние вспышки */
17
+ flash = 'flash',
18
+ /** Open state/ Состояние открытия */
19
+ open = 'open',
20
+ /** Hide state/ Состояние скрытия */
21
+ hide = 'hide',
22
+ /** Close state/ Состояние закрытия */
23
+ close = 'close'
24
+ }
25
+
26
+ /**
27
+ * Window status control items for managing window behavior and appearance/
28
+ * Элементы управления статусом окна для управления поведением и внешним видом окна
29
+ */
30
+ export enum WindowStatusControlItem {
31
+ /** Block interaction/ Блокировка взаимодействия */
32
+ block = 'block',
33
+ /**
34
+ * Block window closing, class added to elements inside window/
35
+ * Блокировка закрытия окна, класс добавляется к элементам внутри окна
36
+ */
37
+ blockChildren = 'blockChildren',
38
+ /** Block other windows/ Блокировка других окон */
39
+ blockOther = 'blockOther',
40
+ /** Close window/ Закрыть окно */
41
+ close = 'close',
42
+ /** Static positioning/ Статическое позиционирование */
43
+ static = 'static',
44
+ /** Static control/ Статическое управление */
45
+ controlStatic = 'controlStatic',
46
+ /** Control only when open/ Управление только когда открыто */
47
+ controlOpenOnly = 'controlOpenOnly',
48
+ /** Active control/ Активное управление */
49
+ controlActive = 'controlActive',
50
+ /** Persistent window/ Постоянное окно */
51
+ persistent = 'persistent'
52
+ }
53
+
54
+ /**
55
+ * Options for window events/
56
+ * Опции для событий окна
57
+ */
58
+ export type WindowEmitOptions = {
59
+ /** Unique window identifier/ Уникальный идентификатор окна */
60
+ id: string
61
+ /** Window DOM element/ DOM элемент окна */
62
+ element: HTMLDivElement
63
+ /** Control DOM element/ DOM элемент управления */
64
+ control: HTMLElement
65
+ /** Window open state/ Состояние открытия окна */
66
+ open: boolean
67
+ }
68
+
69
+ /**
70
+ * List of CSS classes for window styling/
71
+ * Список CSS классов для стилизации окна
72
+ */
73
+ export type WindowClassesList = {
74
+ /** Main block class/ Основной класс блока */
75
+ block: string
76
+ /** Block children class/ Класс дочерних элементов блока */
77
+ blockChildren: string
78
+ /** Block other windows class/ Класс блокировки других окон */
79
+ blockOther: string
80
+ /** Close button class/ Класс кнопки закрытия */
81
+ close: string
82
+ /** Static positioning class/ Класс статического позиционирования */
83
+ static: string
84
+
85
+ /** Control element class/ Класс элемента управления */
86
+ control: string
87
+ /** Control ID class/ Класс ID управления */
88
+ controlId: string
89
+ /** Static control class/ Класс статического управления */
90
+ controlStatic: string
91
+ /** Open-only control class/ Класс управления только для открытого состояния */
92
+ controlOpenOnly: string
93
+ /** Active control class/ Класс активного управления */
94
+ controlActive: string
95
+
96
+ /** Persistent window class/ Класс постоянного окна */
97
+ persistent: string
98
+ }
99
+
100
+ /**
101
+ * Window event click handler/
102
+ * Обработчик события клика окна
103
+ */
104
+ export type WindowEventClick = (event: MouseEvent & TouchEvent) => Promise<void>
105
+
106
+ /**
107
+ * Interface for window classes inclusion/
108
+ * Интерфейс для включения классов окна
109
+ */
110
+ export type WindowControlBasic = {
111
+ /** Window CSS classes list/ Список CSS классов окна */
112
+ classesWindow: WindowClassesList
113
+ }
114
+
115
+ /**
116
+ * Control item data for window management/
117
+ * Данные элемента управления для управления окном
118
+ */
119
+ export type WindowControlItem = WindowControlBasic
120
+ & {
121
+ /** CSS class string/ Строка CSS класса */
122
+ class: string
123
+ /** Reactive open state/ Реактивное состояние открытия */
124
+ open: Ref<boolean>
125
+ /** Click event handler/ Обработчик события клика */
126
+ onclick: WindowEventClick
127
+ /** Context menu event handler/ Обработчик события контекстного меню */
128
+ oncontextmenu: WindowEventClick
129
+ /** Binding properties/ Свойства привязки */
130
+ binds: {
131
+ /** Binding class/ Класс привязки */
132
+ class: string
133
+ /** Click event handler for binding/ Обработчик события клика для привязки */
134
+ onclick: WindowEventClick
135
+ /** Context menu event handler for binding/ Обработчик события контекстного меню для привязки */
136
+ oncontextmenu: WindowEventClick
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Component map for including the Window component/
142
+ * Карта компонентов для подключения компонента Window
143
+ */
144
+ export type WindowComponentInclude = {
145
+ window?: object
146
+ }
147
+
148
+ /**
149
+ * Event map for Window include/
150
+ * Карта событий для подключения Window
151
+ */
152
+ export type WindowEmitsInclude = {
153
+ window: [options: WindowEmitOptions]
154
+ }
155
+
156
+ /**
157
+ * Interface for window expose inclusion/
158
+ * Интерфейс для включения expose окна
159
+ */
160
+ export interface WindowExposeInclude {
161
+ id: ComputedRef<string | undefined>
162
+ open: ComputedRef<boolean>
163
+ control: ComputedRef<WindowControlItem | undefined>
164
+
165
+ setOpen: WindowExpose['setOpen']
166
+ toOpen: WindowExpose['toOpen']
167
+ toClose: WindowExpose['toClose']
168
+ toggle: WindowExpose['toggle']
169
+
170
+ windowElement: Ref<ConstrBind<WindowExpose> | undefined>
171
+ }
172
+
173
+ /**
174
+ * Props used to include and configure the Window component/
175
+ * Свойства для подключения и настройки компонента Window
176
+ */
177
+ export interface WindowPropsInclude<
178
+ Window extends WindowPropsBasic = WindowPropsBasic
179
+ > {
180
+ /** Disabled state/ Отключённое состояние */
181
+ disabled?: boolean
182
+ /** Enable auto close on outside click/ Включить авто-закрытие при клике вне */
183
+ autoClose?: boolean
184
+ /** Additional attributes for Window component/ Дополнительные атрибуты для компонента Window */
185
+ windowAttrs?: ConstrBind<Window>
186
+ }
@@ -0,0 +1,7 @@
1
+ export * from './Window'
2
+ export * from './WindowDesign'
3
+ export * from './WindowInclude'
4
+ export * from './WindowClassesInclude'
5
+ export * from './props'
6
+ export type * from './types'
7
+ export type * from './basicTypes'