@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,28 @@
1
+ interface RipplePropsToken {
2
+ // :type [!] System label / Системная метка
3
+ // :type [!] System label / Системная метка
4
+ }
5
+
6
+ export interface RipplePropsBasic {
7
+ disabled?: boolean
8
+ }
9
+
10
+ /**
11
+ * Type describing incoming properties.
12
+ *
13
+ * Тип, описывающий входящие свойства.
14
+ */
15
+ export interface RippleProps extends RipplePropsBasic, RipplePropsToken {
16
+ }
17
+
18
+ /**
19
+ * Default value for property.
20
+ *
21
+ * Значение по умолчанию для свойства.
22
+ */
23
+ export const defaultsRipple = {
24
+ ...{
25
+ // :default [!] System label / Системная метка
26
+ // :default [!] System label / Системная метка
27
+ }
28
+ }
@@ -0,0 +1,62 @@
1
+ @use "@dxtmisha/styles/properties" as ui;
2
+
3
+ @mixin mixinRipple {
4
+ overflow: hidden;
5
+ @include ui.absolute;
6
+ z-index: 24;
7
+
8
+ border-radius: inherit;
9
+
10
+ &__item {
11
+ @include ui.absolute;
12
+
13
+ @include ui.backgroundColor(
14
+ ui.v('??sys.color', var(--sys-color, ui.v('??backgroundColor'))),
15
+ ui.v('??backgroundOpacity', 1)
16
+ );
17
+ }
18
+
19
+ %ripple-end {
20
+ opacity: 0;
21
+
22
+ transition-delay: ui.v('d.sys.transitionDuration.fade.enter');
23
+ transition-duration: ui.v('d.sys.transitionDuration.fade.through');
24
+ transition-property: opacity;
25
+ }
26
+
27
+ &__item {
28
+ animation-duration: ui.v('d.sys.transitionDuration.fade.through');
29
+ animation-fill-mode: forwards;
30
+ animation-name: ui.n('??start');
31
+ animation-timing-function: linear;
32
+
33
+ &:not(:last-child) {
34
+ @include ui.state('end') {
35
+ @extend %ripple-end;
36
+ }
37
+ }
38
+ }
39
+
40
+ &:not(:active) {
41
+ @include ui.subclass('item') {
42
+ @include ui.state('end') {
43
+ @extend %ripple-end;
44
+ }
45
+ }
46
+ }
47
+
48
+ @keyframes #{ui.n('??start')} {
49
+ 0% {
50
+ @include ui.gradientOpacity(0);
51
+ clip-path: circle(000% at ui.v('??sys.x') ui.v('??sys.y'));
52
+ }
53
+ 50% {
54
+ @include ui.gradientOpacity(ui.v('??backgroundOpacity', 1));
55
+ clip-path: circle(075% at ui.v('??sys.x') ui.v('??sys.y'));
56
+ }
57
+ 100% {
58
+ @include ui.gradientOpacity(ui.v('??backgroundOpacity', 1));
59
+ clip-path: circle(150% at ui.v('??sys.x') ui.v('??sys.y'));
60
+ }
61
+ }
62
+ }
@@ -0,0 +1,41 @@
1
+ import type { ConstrClass } from '@dxtmisha/functional'
2
+
3
+ /**
4
+ * Interface for describing which components need to be connected for work.
5
+ *
6
+ * Интерфейс для описания, какие компоненты надо подключить для работы.
7
+ */
8
+ export type RippleComponents = {}
9
+
10
+ /**
11
+ * Type describing available events.
12
+ *
13
+ * Тип, описывающий доступные события.
14
+ */
15
+ export type RippleEmits = {}
16
+
17
+ /**
18
+ * Type describing available properties.
19
+ *
20
+ * Тип, описывающий доступные свойства.
21
+ */
22
+ export interface RippleExpose {}
23
+
24
+ /**
25
+ * Type describing available slots.
26
+ *
27
+ * Тип, описывающий доступные слоты.
28
+ */
29
+ export interface RippleSlots {}
30
+
31
+ /**
32
+ * Type describing subclasses.
33
+ *
34
+ * Тип, описывающий подклассы.
35
+ */
36
+ export type RippleClasses = {
37
+ main: ConstrClass
38
+ // :classes [!] System label / Системная метка
39
+ item: string
40
+ // :classes [!] System label / Системная метка
41
+ }
@@ -0,0 +1,66 @@
1
+ import { computed, type Ref, type ToRefs } from 'vue'
2
+ import {
3
+ type ConstrClassObject,
4
+ type ConstrEmit,
5
+ type DesignComp,
6
+ ScrollbarWidth
7
+ } from '@dxtmisha/functional'
8
+
9
+ import { ScrollbarBorder } from './ScrollbarBorder'
10
+
11
+ import type { ScrollbarComponents, ScrollbarEmits, ScrollbarSlots } from './types'
12
+ import type { ScrollbarPropsBasic } from './props'
13
+
14
+ /**
15
+ * Scrollbar class provides functionality for managing scrollbar behavior and appearance.
16
+ * It handles scroll width calculations and border display based on scroll position.
17
+ *
18
+ * Класс Scrollbar предоставляет функциональность для управления поведением и внешним видом полосы прокрутки.
19
+ * Он обрабатывает вычисления ширины скролла и отображение границ на основе позиции скролла.
20
+ */
21
+ export class Scrollbar {
22
+ readonly width: ScrollbarWidth
23
+ readonly border: ScrollbarBorder
24
+
25
+ /**
26
+ * Constructor for Scrollbar class.
27
+ *
28
+ * Конструктор класса Scrollbar.
29
+ * @param props input data/ входные данные
30
+ * @param refs input data in the form of reactive elements/ входные данные в виде реактивных элементов
31
+ * @param element input element/ элемент ввода
32
+ * @param classDesign design name/ название дизайна
33
+ * @param className class name/ название класса
34
+ * @param components object for working with components/ объект для работы с компонентами
35
+ * @param slots object for working with slots/ объект для работы со слотами
36
+ * @param emits the function is called when an event is triggered/ функция вызывается, когда срабатывает событие
37
+ */
38
+ constructor(
39
+ protected readonly props: ScrollbarPropsBasic,
40
+ protected readonly refs: ToRefs<ScrollbarPropsBasic>,
41
+ protected readonly element: Ref<HTMLElement | undefined>,
42
+ protected readonly classDesign: string,
43
+ protected readonly className: string,
44
+ protected readonly components?: DesignComp<ScrollbarComponents, ScrollbarPropsBasic>,
45
+ protected readonly slots?: ScrollbarSlots,
46
+ protected readonly emits?: ConstrEmit<ScrollbarEmits>
47
+ ) {
48
+ this.width = new ScrollbarWidth()
49
+ this.border = new ScrollbarBorder(
50
+ props,
51
+ refs,
52
+ element as any,
53
+ className,
54
+ emits
55
+ )
56
+ }
57
+
58
+ /**
59
+ * Returns values for the class.
60
+ *
61
+ * Возвращает значения для класса.
62
+ */
63
+ readonly classes = computed<ConstrClassObject>(() => ({
64
+ [`${this.className}--disabled`]: Boolean(this.width.item.value)
65
+ }))
66
+ }
@@ -0,0 +1,243 @@
1
+ import { onUnmounted, type ToRefs, watch } from 'vue'
2
+ import {
3
+ type ConstrEmit,
4
+ type ConstrValue,
5
+ EventItem
6
+ } from '@dxtmisha/functional'
7
+
8
+ import type { ScrollbarProps } from './props'
9
+ import type { ScrollbarEmits } from './types'
10
+
11
+ const SCROLLBAR_SHIFT = 8
12
+
13
+ /**
14
+ * ScrollbarBorder class provides functionality for updating scroll position and displaying borders.
15
+ * It monitors scroll events and manages visual feedback for top and bottom scroll boundaries.
16
+ *
17
+ * Класс ScrollbarBorder предоставляет функциональность для обновления положения скролла и отображения границ.
18
+ * Он отслеживает события скролла и управляет визуальной обратной связью для верхней и нижней границ скролла.
19
+ */
20
+ export class ScrollbarBorder {
21
+ private event?: EventItem<HTMLDivElement, Event, any>
22
+ private eventSub?: EventItem<HTMLDivElement, Event, any>
23
+
24
+ /**
25
+ * Top boundary state/ состояние верхней границы
26
+ */
27
+ private top: boolean = false
28
+
29
+ /**
30
+ * Bottom boundary state/ состояние нижней границы
31
+ */
32
+ private bottom: boolean = false
33
+
34
+ /**
35
+ * Constructor for ScrollbarBorder class.
36
+ *
37
+ * Конструктор класса ScrollbarBorder.
38
+ * @param props properties/ свойства
39
+ * @param refs input data in the form of reactive elements/ входные данные в виде реактивных элементов
40
+ * @param element input element/ элемент ввода
41
+ * @param className class name/ название класса
42
+ * @param emits the function is called when an event is triggered/ функция вызывается, когда срабатывает событие
43
+ */
44
+ constructor(
45
+ protected readonly props: ScrollbarProps,
46
+ refs: ToRefs<ScrollbarProps>,
47
+ protected readonly element: ConstrValue<HTMLDivElement>,
48
+ protected readonly className: string,
49
+ protected readonly emits?: ConstrEmit<ScrollbarEmits>
50
+ ) {
51
+ watch([
52
+ this.element,
53
+ refs.divider,
54
+ refs.dividerTop,
55
+ refs.dividerBottom,
56
+ refs.inverse
57
+ ], this.reset, { immediate: true })
58
+
59
+ onUnmounted(() => this.stop())
60
+ }
61
+
62
+ /**
63
+ * Changing the monitoring status depending on the border parameter.
64
+ *
65
+ * Изменение статуса слежения в зависимости от параметра border.
66
+ */
67
+ readonly toggle = (): void => {
68
+ if (
69
+ this.props.divider
70
+ || this.props.dividerTop
71
+ || this.props.dividerBottom
72
+ ) {
73
+ this.start()
74
+ } else {
75
+ this.stop()
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Updating the monitoring element for the event object.
81
+ *
82
+ * Обновление элемента слежения для объекта события.
83
+ */
84
+ readonly reset = (): void => {
85
+ if (this.element.value) {
86
+ if (this.event) {
87
+ this.event.setElement(this.element.value)
88
+
89
+ if (
90
+ this.eventSub
91
+ && this.element.value.children?.[0]
92
+ ) {
93
+ this.eventSub.setElement(this.element.value.children[0] as HTMLDivElement)
94
+ }
95
+ }
96
+
97
+ this.toggle()
98
+ this.update()
99
+ } else {
100
+ this.stop()
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Start monitoring the scroll.
106
+ *
107
+ * Начать слежение за скроллом.
108
+ */
109
+ start(): void {
110
+ if (this.event) {
111
+ this.event.start()
112
+ } else {
113
+ this.event = new EventItem<HTMLDivElement, Event>(this.element.value, ['scroll-sync'], this.on)
114
+ .start()
115
+ }
116
+
117
+ if (this.eventSub) {
118
+ this.eventSub.start()
119
+ } else if (
120
+ this.element.value?.children?.[0]
121
+ ) {
122
+ this.eventSub = new EventItem<HTMLDivElement, Event>(this.element.value.children[0] as HTMLDivElement, ['resize'], this.on)
123
+ .start()
124
+ }
125
+
126
+ this.on()
127
+ }
128
+
129
+ /**
130
+ * Stopping the monitoring of scroll changes.
131
+ *
132
+ * Остановка слежения за изменениями скролла.
133
+ */
134
+ stop(): void {
135
+ if (this.event) {
136
+ this.event.stop()
137
+ this.event = undefined
138
+ }
139
+
140
+ if (this.eventSub) {
141
+ this.eventSub.stop()
142
+ this.eventSub = undefined
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Updates the list of active classes.
148
+ *
149
+ * Обновляет список активных классов.
150
+ */
151
+ protected readonly update = () => {
152
+ const element = this.element.value
153
+
154
+ if (element) {
155
+ element.classList.toggle(`${this.className}--divider--top`, this.top)
156
+ element.classList.toggle(`${this.className}--divider--bottom`, this.bottom)
157
+ element.dataset.scrollbarDivider = this.top || this.bottom ? 'divider' : 'none'
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Function for the event of monitoring scroll changes.
163
+ *
164
+ * Функция для события слежения за изменениями скролла.
165
+ */
166
+ protected readonly on = (): void => {
167
+ const element = this.element.value
168
+
169
+ if (element) {
170
+ this.setData(
171
+ element.scrollTop > SCROLLBAR_SHIFT,
172
+ element.scrollTop < element.scrollHeight - element.clientHeight - SCROLLBAR_SHIFT
173
+ )
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Changing the data for class output.
179
+ *
180
+ * Изменение данных для вывода класса.
181
+ * @param top status of the top border display/ статус отображения верхнего бордера
182
+ * @param bottom status of the bottom border display/ статус отображения нижнего бордера
183
+ */
184
+ protected setData(
185
+ top: boolean,
186
+ bottom: boolean
187
+ ): this {
188
+ if (
189
+ this.top !== top
190
+ || this.bottom !== bottom
191
+ ) {
192
+ this.setTop(top)
193
+ .setBottom(bottom)
194
+ .update()
195
+ }
196
+
197
+ return this
198
+ }
199
+
200
+ /**
201
+ * Sets the top boundary state and emits related events.
202
+ *
203
+ * Устанавливает состояние верхней границы и генерирует связанные события.
204
+ * @param top status of the top border display/ статус отображения верхнего бордера
205
+ */
206
+ private setTop(top: boolean): this {
207
+ if (this.top !== top) {
208
+ this.top = top
209
+
210
+ this.emits?.('top', top)
211
+ this.emits?.('edge', top, this.bottom, 'top')
212
+
213
+ if (top) {
214
+ this.emits?.('reachTop')
215
+ } else {
216
+ this.emits?.('leaveTop')
217
+ }
218
+ }
219
+ return this
220
+ }
221
+
222
+ /**
223
+ * Sets the bottom boundary state and emits related events.
224
+ *
225
+ * Устанавливает состояние нижней границы и генерирует связанные события.
226
+ * @param bottom status of the bottom border display/ статус отображения нижнего бордера
227
+ */
228
+ private setBottom(bottom: boolean): this {
229
+ if (this.bottom !== bottom) {
230
+ this.bottom = bottom
231
+
232
+ this.emits?.('bottom', bottom)
233
+ this.emits?.('edge', this.top, bottom, 'bottom')
234
+
235
+ if (bottom) {
236
+ this.emits?.('reachBottom')
237
+ } else {
238
+ this.emits?.('leaveBottom')
239
+ }
240
+ }
241
+ return this
242
+ }
243
+ }
@@ -0,0 +1,126 @@
1
+ import { h, type VNode } from 'vue'
2
+ import {
3
+ type ConstrOptions,
4
+ type ConstrStyles,
5
+ DesignConstructorAbstract
6
+ } from '@dxtmisha/functional'
7
+
8
+ import { Scrollbar } from './Scrollbar'
9
+
10
+ import {
11
+ type ScrollbarPropsBasic
12
+ } from './props'
13
+ import {
14
+ type ScrollbarClasses,
15
+ type ScrollbarComponents,
16
+ type ScrollbarEmits,
17
+ type ScrollbarExpose,
18
+ type ScrollbarSlots
19
+ } from './types'
20
+
21
+ /**
22
+ * ScrollbarDesign
23
+ */
24
+ export class ScrollbarDesign<
25
+ COMP extends ScrollbarComponents,
26
+ EXPOSE extends ScrollbarExpose,
27
+ CLASSES extends ScrollbarClasses,
28
+ P extends ScrollbarPropsBasic
29
+ > extends DesignConstructorAbstract<
30
+ HTMLDivElement,
31
+ COMP,
32
+ ScrollbarEmits,
33
+ EXPOSE,
34
+ ScrollbarSlots,
35
+ CLASSES,
36
+ P
37
+ > {
38
+ protected readonly item: Scrollbar
39
+
40
+ /**
41
+ * Constructor
42
+ * @param name class name/ название класса
43
+ * @param props properties/ свойства
44
+ * @param options list of additional parameters/ список дополнительных параметров
45
+ */
46
+ constructor(
47
+ name: string,
48
+ props: Readonly<P>,
49
+ options?: ConstrOptions<COMP, ScrollbarEmits, P>
50
+ ) {
51
+ super(
52
+ name,
53
+ props,
54
+ options
55
+ )
56
+
57
+ this.item = new Scrollbar(
58
+ this.props,
59
+ this.refs,
60
+ this.element,
61
+ this.getDesign(),
62
+ this.getName(),
63
+ this.components,
64
+ this.slots,
65
+ this.emits
66
+ )
67
+
68
+ this.init()
69
+ }
70
+
71
+ /**
72
+ * Initialization of all the necessary properties for work
73
+ *
74
+ * Инициализация всех необходимых свойств для работы.
75
+ */
76
+ protected initExpose(): EXPOSE {
77
+ return {} as EXPOSE
78
+ }
79
+
80
+ /**
81
+ * Improvement of the obtained list of classes.
82
+ *
83
+ * Доработка полученного списка классов.
84
+ */
85
+ protected initClasses(): Partial<CLASSES> {
86
+ return {
87
+ main: this.item.classes.value,
88
+ ...{
89
+ // :classes [!] System label / Системная метка
90
+ // :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 {}
102
+ }
103
+
104
+ /**
105
+ * A method for rendering.
106
+ *
107
+ * Метод для рендеринга.
108
+ */
109
+ protected initRender(): VNode | undefined {
110
+ const children: any[] = [this.initSlot('default')]
111
+
112
+ if (this.item.width.is.value) {
113
+ return h(
114
+ this.props.tag ?? 'div',
115
+ {
116
+ ...this.getAttrs(),
117
+ ref: this.element,
118
+ class: this.classes?.value.main
119
+ },
120
+ children
121
+ )
122
+ }
123
+
124
+ return undefined
125
+ }
126
+ }
@@ -0,0 +1,80 @@
1
+ import { h, type VNode } from 'vue'
2
+ import { type ConstrEmit, DesignComponents, toBind } from '@dxtmisha/functional'
3
+
4
+ import type { ScrollbarComponentsInclude, ScrollbarEmitsInclude, ScrollbarPropsInclude, ScrollbarEdgeType } from './basicTypes'
5
+
6
+ /**
7
+ * ScrollbarInclude class provides functionality for conditionally rendering scrollbar components
8
+ * within other components. It manages the logic for determining when to display a scrollbar
9
+ * and configures the appropriate properties.
10
+ *
11
+ * Класс ScrollbarInclude предоставляет функциональность для условного рендеринга компонентов
12
+ * скроллбара внутри других компонентов. Он управляет логикой определения необходимости
13
+ * отображения скроллбара и настраивает соответствующие свойства.
14
+ *
15
+ * @template Props - Properties interface extending ScrollbarPropsInclude
16
+ */
17
+ export class ScrollbarInclude<Props extends ScrollbarPropsInclude = ScrollbarPropsInclude> {
18
+ /**
19
+ * Constructor
20
+ * @param props input parameter/ входной параметр
21
+ * @param className class name/ название класса
22
+ * @param components object for working with components/ объект для работы с компонентами
23
+ * @param emits the function is called when an event is triggered/ функция вызывается, когда срабатывает событие
24
+ */
25
+ constructor(
26
+ protected readonly props: Readonly<Props>,
27
+ protected readonly className: string,
28
+ protected readonly components?: DesignComponents<ScrollbarComponentsInclude, Props>,
29
+ protected readonly emits?: ConstrEmit<ScrollbarEmitsInclude>
30
+ ) {
31
+ }
32
+
33
+ /**
34
+ * Renders scrollbar component or fallback element
35
+ * Рендерит компонент скроллбара или элемент по умолчанию
36
+ */
37
+ render(
38
+ tag: string,
39
+ props?: Record<string, any>,
40
+ children?: any
41
+ ): VNode[] {
42
+ if (this.components) {
43
+ const scrollbar = this.components.renderOne(
44
+ 'scrollbar',
45
+ toBind(
46
+ {
47
+ tag,
48
+ class: `${this.className}__scrollbar`,
49
+ ...(props ?? {}),
50
+ ...this.getScrollbarEvents()
51
+ },
52
+ this.props.scrollbarAttrs ?? {}
53
+ ),
54
+ children
55
+ )
56
+
57
+ if (scrollbar) {
58
+ return [scrollbar]
59
+ }
60
+ }
61
+
62
+ return [h(tag, props, children)]
63
+ }
64
+
65
+ /**
66
+ * Returns event handlers for scrollbar
67
+ * Возвращает обработчики событий для скроллбара
68
+ */
69
+ protected getScrollbarEvents() {
70
+ return {
71
+ onTop: (isTop: boolean) => this.emits?.('scrollbarTop', isTop),
72
+ onReachTop: () => this.emits?.('scrollbarReachTop'),
73
+ onLeaveTop: () => this.emits?.('scrollbarLeaveTop'),
74
+ onBottom: (isBottom: boolean) => this.emits?.('scrollbarBottom', isBottom),
75
+ onReachBottom: () => this.emits?.('scrollbarReachBottom'),
76
+ onLeaveBottom: () => this.emits?.('scrollbarLeaveBottom'),
77
+ onEdge: (isTop: boolean, isBottom: boolean, edge: ScrollbarEdgeType) => this.emits?.('scrollbarEdge', isTop, isBottom, edge)
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,42 @@
1
+ import type { ConstrBind } from '@dxtmisha/functional'
2
+
3
+ import type { ScrollbarPropsBasic } from './props'
4
+ import type { ScrollbarEmits } from './types'
5
+
6
+ /**
7
+ * Type describing the edge position of the scrollbar/
8
+ * Тип, описывающий позицию края скроллбара
9
+ */
10
+ export type ScrollbarEdgeType = 'top' | 'bottom'
11
+
12
+ /**
13
+ * Interface for describing which components need to be connected for work/
14
+ * Интерфейс для описания, какие компоненты надо подключить для работы
15
+ */
16
+ export type ScrollbarComponentsInclude = {
17
+ scrollbar?: object
18
+ }
19
+
20
+ /**
21
+ * Interface for describing available events with scrollbar prefix/
22
+ * Интерфейс для описания доступных событий с префиксом scrollbar
23
+ */
24
+ export type ScrollbarEmitsInclude = {
25
+ scrollbarTop: ScrollbarEmits['top']
26
+ scrollbarReachTop: ScrollbarEmits['reachTop']
27
+ scrollbarLeaveTop: ScrollbarEmits['leaveTop']
28
+ scrollbarBottom: ScrollbarEmits['bottom']
29
+ scrollbarReachBottom: ScrollbarEmits['reachBottom']
30
+ scrollbarLeaveBottom: ScrollbarEmits['leaveBottom']
31
+ scrollbarEdge: ScrollbarEmits['edge']
32
+ }
33
+
34
+ /**
35
+ * Interface for describing available properties for scrollbar inclusion/
36
+ * Интерфейс для описания доступных свойств для включения скроллбара
37
+ */
38
+ export interface ScrollbarPropsInclude<
39
+ Scrollbar extends ScrollbarPropsBasic = ScrollbarPropsBasic
40
+ > {
41
+ scrollbarAttrs?: ConstrBind<Scrollbar>
42
+ }
@@ -0,0 +1,5 @@
1
+ export * from './Scrollbar'
2
+ export * from './ScrollbarDesign'
3
+ export * from './props'
4
+ export * from './types'
5
+ export * from './basicTypes'