@ctzy-web-client/plugin-component-vue 1.0.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 (138) hide show
  1. package/package.json +43 -0
  2. package/src/advance-select/advance-operation.vue +44 -0
  3. package/src/advance-select/advance-option.vue +115 -0
  4. package/src/advance-select/advance-select.vue +343 -0
  5. package/src/advance-select/events-helpers.js +40 -0
  6. package/src/advance-select/index.js +13 -0
  7. package/src/advance-select/use-advance-option.js +58 -0
  8. package/src/advance-select/use-advance-select.js +142 -0
  9. package/src/application-slot/application-slot.js +70 -0
  10. package/src/application-slot/breadcrumb-item.vue +12 -0
  11. package/src/application-slot/header-tools-item.vue +12 -0
  12. package/src/application-slot/index.js +17 -0
  13. package/src/breadcrumb-select/breadcrumb-select.vue +97 -0
  14. package/src/breadcrumb-select/index.js +6 -0
  15. package/src/components.js +39 -0
  16. package/src/contextmenu/contextmenu-item.vue +13 -0
  17. package/src/contextmenu/contextmenu.vue +56 -0
  18. package/src/contextmenu/index.js +11 -0
  19. package/src/contextmenu/use-contextmenu.js +117 -0
  20. package/src/data-form/data-form-item.vue +49 -0
  21. package/src/data-form/data-form.vue +212 -0
  22. package/src/data-form/dynamic-component.js +24 -0
  23. package/src/data-form/form-components/Blots/AtBlot.js +32 -0
  24. package/src/data-form/form-components/bwa-date-picker.vue +43 -0
  25. package/src/data-form/form-components/bwa-date-time-picker.vue +49 -0
  26. package/src/data-form/form-components/bwa-input-float.vue +41 -0
  27. package/src/data-form/form-components/bwa-input-integer.vue +58 -0
  28. package/src/data-form/form-components/bwa-input.vue +32 -0
  29. package/src/data-form/form-components/bwa-multi-select.vue +27 -0
  30. package/src/data-form/form-components/bwa-rich-text-tinymce.vue +561 -0
  31. package/src/data-form/form-components/bwa-rich-text.vue +395 -0
  32. package/src/data-form/form-components/bwa-select.vue +67 -0
  33. package/src/data-form/form-components/bwa-textarea.vue +28 -0
  34. package/src/data-form/form-components/bwa-upload.vue +145 -0
  35. package/src/data-form/form-components/bwa-user-multi-select.vue +25 -0
  36. package/src/data-form/form-components/bwa-user-select.vue +81 -0
  37. package/src/data-form/index.js +35 -0
  38. package/src/data-table/data-column-view.vue +131 -0
  39. package/src/data-table/data-table-card.vue +81 -0
  40. package/src/data-table/data-table-column.vue +52 -0
  41. package/src/data-table/data-table.vue +426 -0
  42. package/src/data-table/dynamic-component.js +58 -0
  43. package/src/data-table/index.js +13 -0
  44. package/src/data-table/use-datatable-drag.js +156 -0
  45. package/src/datatable-settings/datatable-settings.vue +323 -0
  46. package/src/datatable-settings/index.js +6 -0
  47. package/src/date-range/date-picker.vue +115 -0
  48. package/src/date-range/date-range.vue +202 -0
  49. package/src/date-range/index.js +6 -0
  50. package/src/drag-list/constants.js +1 -0
  51. package/src/drag-list/drag-item.vue +46 -0
  52. package/src/drag-list/drag-list.vue +50 -0
  53. package/src/drag-list/index.js +6 -0
  54. package/src/drag-list/use-drag-list.js +209 -0
  55. package/src/dragable/constants.js +3 -0
  56. package/src/dragable/dragable-item.vue +19 -0
  57. package/src/dragable/dragable-operation.vue +28 -0
  58. package/src/dragable/dragable.vue +26 -0
  59. package/src/dragable/index.js +14 -0
  60. package/src/dragable/use-dragable.js +227 -0
  61. package/src/filter-panel/conditions/condition.js +35 -0
  62. package/src/filter-panel/conditions/date-range-condition.vue +35 -0
  63. package/src/filter-panel/conditions/department-condition/data.json +29537 -0
  64. package/src/filter-panel/conditions/department-condition/department-condition.vue +92 -0
  65. package/src/filter-panel/conditions/department-condition/department-node.vue +52 -0
  66. package/src/filter-panel/conditions/index.js +22 -0
  67. package/src/filter-panel/conditions/input-condition.vue +63 -0
  68. package/src/filter-panel/conditions/multi-user-condition.vue +56 -0
  69. package/src/filter-panel/conditions/multiple-menu-condition.vue +45 -0
  70. package/src/filter-panel/conditions/single-menu-condition.vue +58 -0
  71. package/src/filter-panel/conditions/single-user-condition.vue +56 -0
  72. package/src/filter-panel/filter-panel-item.vue +46 -0
  73. package/src/filter-panel/filter-panel.vue +149 -0
  74. package/src/filter-panel/index.js +17 -0
  75. package/src/filter-panel/use-filter-panel-item.js +59 -0
  76. package/src/filter-panel/use-filter-panel.js +203 -0
  77. package/src/hooks/use-data/index.js +234 -0
  78. package/src/index.js +48 -0
  79. package/src/layout/index.js +6 -0
  80. package/src/layout/layout.vue +74 -0
  81. package/src/make-installer.js +36 -0
  82. package/src/math/Rectangle.js +28 -0
  83. package/src/menu/index.js +6 -0
  84. package/src/menu/menu-item.vue +41 -0
  85. package/src/menu/menu.vue +53 -0
  86. package/src/panel/index.js +6 -0
  87. package/src/panel/panel.vue +42 -0
  88. package/src/panel-tabs/index.js +6 -0
  89. package/src/panel-tabs/panel-tabs.js +92 -0
  90. package/src/pct-filter-panel/index.js +10 -0
  91. package/src/pct-filter-panel/pct-compents/index.js +10 -0
  92. package/src/pct-filter-panel/pct-compents/pct-Input-condition.vue +63 -0
  93. package/src/pct-filter-panel/pct-compents/pct-date-range-condition.vue +60 -0
  94. package/src/pct-filter-panel/pct-compents/pct-multiple-menu-condition.vue +177 -0
  95. package/src/pct-filter-panel/pct-compents/pct-multiple-menu-condition2.vue +142 -0
  96. package/src/pct-filter-panel/pct-filter-panel-item.vue +46 -0
  97. package/src/pct-filter-panel/pct-filter-panel.vue +201 -0
  98. package/src/pct-filter-panel/use-filter-panel-item.js +61 -0
  99. package/src/pct-filter-panel/use-filter-panel.js +206 -0
  100. package/src/plugins.js +3 -0
  101. package/src/progress/index.js +8 -0
  102. package/src/progress/progress-item.vue +81 -0
  103. package/src/progress/progress.vue +58 -0
  104. package/src/progress/use-progress.js +66 -0
  105. package/src/utils/db.js +8 -0
  106. package/src/utils.js +263 -0
  107. package/src/where-filter-panel/index.js +0 -0
  108. package/src/where-filter-panel/use-where-filter-panel.js +28 -0
  109. package/src/where-filter-panel/where-filter-panel.vue +9 -0
  110. package/style/advance-select.scss +316 -0
  111. package/style/breadcrumb-select.scss +80 -0
  112. package/style/common/var.scss +240 -0
  113. package/style/common.scss +48 -0
  114. package/style/contextmenu.scss +58 -0
  115. package/style/data-form.scss +35 -0
  116. package/style/data-table.scss +81 -0
  117. package/style/datatable-settings.scss +125 -0
  118. package/style/date-range.scss +136 -0
  119. package/style/department-condition.scss +39 -0
  120. package/style/drag-list.scss +68 -0
  121. package/style/dragable.scss +8 -0
  122. package/style/filter-panel.scss +199 -0
  123. package/style/index.scss +22 -0
  124. package/style/input-condition.scss +30 -0
  125. package/style/layout.scss +70 -0
  126. package/style/menu.scss +184 -0
  127. package/style/mixins/_var.scss +21 -0
  128. package/style/mixins/config.scss +4 -0
  129. package/style/mixins/function.scss +62 -0
  130. package/style/mixins/mixins.scss +88 -0
  131. package/style/panel-tabs.scss +60 -0
  132. package/style/panel.scss +110 -0
  133. package/style/pct-filter-panel.scss +306 -0
  134. package/style/progress.scss +122 -0
  135. package/style/rich-text.scss +30 -0
  136. package/style/theme/theme.scss +161 -0
  137. package/style/theme/var.scss +34 -0
  138. package/style/var.scss +21 -0
@@ -0,0 +1,199 @@
1
+ @use 'common/var' as *;
2
+ @use 'mixins/mixins' as *;
3
+
4
+ @include b(filterpanel) {
5
+ font-size: 14px;
6
+ line-height: 22px;
7
+ color: getCssVar('text-color', 'primary');
8
+ display: flex;
9
+ align-items: center;
10
+ flex-wrap: wrap;
11
+ margin-top: -15px;
12
+
13
+ @include e(search) {
14
+ width: 144px;
15
+ margin: 15px 8px 0 0;
16
+
17
+ .el-input__wrapper {
18
+ padding: 3px 7px;
19
+ border-radius: 4px;
20
+ }
21
+ }
22
+
23
+ @include e(options) {
24
+ font-weight: 500;
25
+ }
26
+
27
+ @include e(reset) {
28
+ --el-button-size: 28px;
29
+ margin-top: 15px;
30
+ }
31
+ }
32
+
33
+ @include b(filterpanel-item) {
34
+ display: inline-block;
35
+ position: relative;
36
+ margin-right: 20px;
37
+ margin-top: 15px;
38
+
39
+ @include e(close) {
40
+ position: absolute;
41
+ left: 0;
42
+ top: 0;
43
+ display: none;
44
+ font-size: 16px;
45
+ opacity: 0.6;
46
+ transform: translate(-50%, -50%);
47
+ cursor: pointer;
48
+
49
+ @include pseudo(hover) {
50
+ opacity: 1;
51
+ }
52
+ }
53
+
54
+ @include pseudo(hover) {
55
+ @include e(close) {
56
+ display: inline;
57
+ }
58
+ }
59
+ }
60
+
61
+ @include b(filterpanel-filter) {
62
+ @include e(plus) {
63
+ position: relative;
64
+ width: 10px;
65
+ height: 10px;
66
+
67
+ &::before,
68
+ &::after {
69
+ content: '';
70
+ position: absolute;
71
+ width: 100%;
72
+ height: 2px;
73
+ left: 50%;
74
+ top: 50%;
75
+ transform: translate(-50%, -50%);
76
+ background-color: getCssVar('text-color', 'primary');
77
+ }
78
+
79
+ &::after {
80
+ transform: translate(-50%, -50%) rotate(90deg);
81
+ }
82
+ }
83
+
84
+ @include e(label) {
85
+ margin-left: 4px;
86
+ }
87
+
88
+ @include e(option) {
89
+ .bwa-advance-option__content {
90
+ display: flex;
91
+ align-items: center;
92
+ justify-content: space-between;
93
+ }
94
+ }
95
+
96
+ @include e(checkbox) {
97
+ display: inline-flex;
98
+ height: auto;
99
+ flex: 1;
100
+ width: 0;
101
+
102
+ .el-checkbox__label {
103
+ flex: 1;
104
+ overflow: hidden;
105
+ white-space: nowrap;
106
+ text-overflow: ellipsis;
107
+ }
108
+ }
109
+
110
+ @include e(title) {
111
+ font-size: 12px;
112
+ line-height: 20px;
113
+ color: getCssVar('text-color', 'regular');
114
+ }
115
+ }
116
+
117
+ // .#{$namespace}-filterpanel {
118
+ // font-size: 14px;
119
+ // line-height: 22px;
120
+ // color: $black-1;
121
+ // display: flex;
122
+ // align-items: center;
123
+ // flex-wrap: wrap;
124
+ // margin-top: -15px;
125
+
126
+ // &-item {
127
+ // display: inline-block;
128
+ // position: relative;
129
+ // margin-right: 20px;
130
+ // margin-top: 15px;
131
+
132
+ // &__close {
133
+ // position: absolute;
134
+ // left: 0;
135
+ // top: 0;
136
+ // display: none;
137
+ // font-size: 16px;
138
+ // opacity: 0.6;
139
+ // transform: translate(-50%, -50%);
140
+ // cursor: pointer;
141
+ // &:hover {
142
+ // opacity: 1;
143
+ // }
144
+ // }
145
+
146
+ // &:hover &__close {
147
+ // display: inline;
148
+ // }
149
+ // }
150
+
151
+ // &-filter {
152
+ // &__label {
153
+ // margin-left: 4px;
154
+ // }
155
+
156
+ // &__option {
157
+ // .bwa-advance-option__content {
158
+ // display: flex;
159
+ // align-items: center;
160
+ // justify-content: space-between;
161
+ // }
162
+ // }
163
+
164
+ // &__checkbox {
165
+ // display: inline-flex;
166
+ // height: auto;
167
+ // flex: 1;
168
+ // width: 0;
169
+
170
+ // .el-checkbox__label {
171
+ // flex: 1;
172
+ // overflow: hidden;
173
+ // white-space: nowrap;
174
+ // text-overflow: ellipsis;
175
+ // }
176
+ // }
177
+
178
+ // &__title {
179
+ // font-size: 12px;
180
+ // line-height: 20px;
181
+ // color: $black-3;
182
+ // }
183
+ // }
184
+
185
+ // &__search {
186
+ // width: 144px;
187
+ // margin: 15px 8px 0 0;
188
+
189
+ // .el-input__wrapper {
190
+ // padding: 3px 7px;
191
+ // border-radius: 4px;
192
+ // }
193
+ // }
194
+
195
+ // &__reset {
196
+ // --el-button-size: 28px;
197
+ // margin-top: 15px;
198
+ // }
199
+ // }
@@ -0,0 +1,22 @@
1
+ @use './var.scss';
2
+ @use './common.scss';
3
+ @use './theme/theme.scss';
4
+ @use './data-form.scss';
5
+ @use './data-table.scss';
6
+ @use './filter-panel.scss';
7
+ @use './input-condition.scss';
8
+ @use './advance-select.scss';
9
+ @use './date-range.scss';
10
+ @use './layout.scss';
11
+ @use './menu.scss';
12
+ @use './panel.scss';
13
+ @use './panel-tabs.scss';
14
+ @use './contextmenu.scss';
15
+ @use './breadcrumb-select.scss';
16
+ @use './datatable-settings.scss';
17
+ @use './drag-list.scss';
18
+ @use './dragable.scss';
19
+ @use './progress.scss';
20
+ @use './rich-text.scss';
21
+ @use './department-condition.scss';
22
+ @use './pct-filter-panel.scss';
@@ -0,0 +1,30 @@
1
+ @use 'common/var' as *;
2
+ @use 'mixins/mixins' as *;
3
+
4
+ @include b(input-condition) {
5
+ display: inline-block;
6
+ padding: 3px 6px;
7
+ border-radius: 4px;
8
+ transition: 0.2s ease-out;
9
+ cursor: pointer;
10
+
11
+ @include pseudo(hover) {
12
+ background-color: #f2f4f6;
13
+ }
14
+
15
+ @include when(active) {
16
+ background-color: #f2f4f6;
17
+ }
18
+
19
+ @include e(content) {
20
+ padding: 8px;
21
+ }
22
+
23
+ @include e(input) {
24
+ width: 150px;
25
+ }
26
+
27
+ @include e(label) {
28
+ color: getCssVar('text-color', 'primary');
29
+ }
30
+ }
@@ -0,0 +1,70 @@
1
+ @use 'common/var' as *;
2
+ @use 'mixins/mixins' as *;
3
+
4
+ @include b(layout) {
5
+ @include set-component-css-var('layout', $layout);
6
+ $spacing-size: getCssVar('layout', 'spacing-size');
7
+
8
+ width: 100%;
9
+ height: 100%;
10
+ align-items: flex-start;
11
+
12
+ @include e(menu-wrapper) {
13
+ // width: getCssVar('layout', 'menu-wrapper-width');
14
+ .el-scrollbar__view {
15
+ padding: $spacing-size 0;
16
+ }
17
+
18
+ @include e(menu) {
19
+ width: 100%;
20
+ }
21
+ }
22
+
23
+ @include e(main) {
24
+ flex: 1;
25
+ width: 0;
26
+ height: 100%;
27
+ padding: $spacing-size 0 $spacing-size $spacing-size;
28
+ box-sizing: border-box;
29
+ overflow: hidden;
30
+ }
31
+ }
32
+
33
+ // .#{$namespace}-layout {
34
+ // width: 100%;
35
+ // height: 100%;
36
+ // align-items: flex-start;
37
+
38
+ // &__menu-wrapper {
39
+ // .el-scrollbar__view {
40
+ // padding-top: 24px;
41
+ // }
42
+ // }
43
+
44
+ // &__menu {
45
+ // width: $leftPanelWidth;
46
+ // }
47
+
48
+ // &__main-wrapper {
49
+ // flex: 1;
50
+ // width: 0;
51
+ // height: 100%;
52
+ // padding: 0 map-get($gap, 'module');
53
+ // overflow: auto;
54
+ // box-sizing: border-box;
55
+
56
+ // > .el-scrollbar__wrap > .el-scrollbar__view {
57
+ // min-height: 100%;
58
+ // }
59
+ // }
60
+
61
+ // &__main {
62
+ // $moduleGap: map-get($gap, 'module');
63
+ // flex: 1;
64
+ // width: 0;
65
+ // height: 100%;
66
+ // padding: $moduleGap 0 $moduleGap $moduleGap;
67
+ // box-sizing: border-box;
68
+ // overflow: hidden;
69
+ // }
70
+ // }
@@ -0,0 +1,184 @@
1
+ @use 'common/var' as *;
2
+ @use 'mixins/mixins' as *;
3
+
4
+ @mixin normalClass() {
5
+ .el-sub-menu > .el-sub-menu__title,
6
+ .el-menu-item {
7
+ height: getCssVar('menu', 'item-height');
8
+ color: getCssVar('menu', 'item-text-color');
9
+ }
10
+
11
+ .el-sub-menu.is-active {
12
+ .el-sub-menu__title {
13
+ .ptp-icon,
14
+ .bwa-menu-item__content {
15
+ color: getCssVar('menu', 'active-text-color');
16
+ }
17
+ }
18
+ }
19
+ }
20
+
21
+ @include b(menu) {
22
+ @include set-component-css-var('menu', $menu);
23
+
24
+ --el-menu-bg-color: none;
25
+ border: none;
26
+ width: getCssVar('layout', 'left-panel-width');
27
+
28
+ @include m(collapsed) {
29
+ width: auto;
30
+ }
31
+
32
+ .el-menu-item {
33
+ &:hover {
34
+ background-color: getCssVar('menu', 'item-hover-bg-color');
35
+ }
36
+ &.is-active {
37
+ background-color: getCssVar('menu', 'item-active-bg-color');
38
+ color: getCssVar('menu', 'active-text-color');
39
+ &::before {
40
+ content: '';
41
+ position: absolute;
42
+ left: 0;
43
+ top: 0;
44
+ bottom: 0;
45
+ width: getCssVar('menu', 'bar-width');
46
+ background-color: getCssVar('menu', 'active-text-color');
47
+ }
48
+ }
49
+ }
50
+
51
+ @include normalClass();
52
+
53
+ .el-sub-menu > .el-sub-menu__title {
54
+ padding-right: 0;
55
+ }
56
+
57
+ .el-menu-item {
58
+ .ptp-icon {
59
+ color: getCssVar('menu', 'icon-color');
60
+ }
61
+
62
+ &.is-active {
63
+ .ptp-icon {
64
+ color: getCssVar('menu', 'active-text-color');
65
+ }
66
+ }
67
+ }
68
+
69
+ .el-sub-menu,
70
+ .el-menu-item {
71
+ + .el-menu-item,
72
+ + .el-sub-menu,
73
+ .el-menu-item,
74
+ .el-sub-menu {
75
+ margin-top: getCssVar('menu', 'item-spacing');
76
+ }
77
+ }
78
+
79
+ .ptp-icon {
80
+ position: absolute;
81
+ top: 50%;
82
+ left: getCssVar('menu', 'icon-left');
83
+ transform: translate(0, -50%);
84
+ }
85
+ }
86
+
87
+ @include b(menu-item) {
88
+ .ptp-icon {
89
+ font-size: getCssVar('menu', 'icon-size');
90
+ }
91
+
92
+ @include e(content) {
93
+ padding-left: getCssVar('menu', 'content-padding-left');
94
+ box-sizing: border-box;
95
+ overflow: hidden;
96
+ text-overflow: ellipsis;
97
+ }
98
+ }
99
+
100
+ @include b(menu-sub) {
101
+ @include set-component-css-var('menu', $menu);
102
+ --bwa-menu-content-padding-left: 10px;
103
+ @include normalClass();
104
+
105
+ .el-sub-menu,
106
+ .el-menu-item {
107
+ + .el-menu-item,
108
+ + .el-sub-menu {
109
+ margin-top: getCssVar('menu', 'item-spacing');
110
+ }
111
+ }
112
+ }
113
+
114
+ // .#{$namespace}-menu {
115
+ // --el-menu-bg-color: none;
116
+ // border: none;
117
+
118
+ // &-item {
119
+ // .ptp-icon {
120
+ // font-size: 14px;
121
+ // }
122
+
123
+ // &__content {
124
+ // padding-left: 40px;
125
+ // box-sizing: border-box;
126
+ // overflow: hidden;
127
+ // text-overflow: ellipsis;
128
+ // }
129
+ // }
130
+
131
+ // .el-menu-item {
132
+ // .ptp-icon {
133
+ // color: #547781;
134
+ // }
135
+
136
+ // &.is-active {
137
+ // .ptp-icon {
138
+ // color: #19bbff;
139
+ // }
140
+ // }
141
+ // }
142
+
143
+ // .el-sub-menu,
144
+ // .el-menu-item {
145
+ // + .el-sub-menu,
146
+ // + .el-menu-item {
147
+ // margin-top: 8px;
148
+ // }
149
+ // }
150
+
151
+ // .el-sub-menu__title + .el-menu {
152
+ // margin-top: 8px;
153
+ // }
154
+
155
+ // .el-sub-menu > .el-sub-menu__title,
156
+ // .el-menu-item {
157
+ // height: 40px;
158
+ // color: #24515d;
159
+
160
+ // &:hover {
161
+ // background-color: rgba(176, 192, 197, 0.15);
162
+ // }
163
+ // &.is-active {
164
+ // background-color: #cde9f5;
165
+ // color: #19bbff;
166
+ // &::before {
167
+ // content: '';
168
+ // position: absolute;
169
+ // left: 0;
170
+ // top: 0;
171
+ // bottom: 0;
172
+ // width: 4px;
173
+ // background-color: $primaryColor;
174
+ // }
175
+ // }
176
+
177
+ // .ptp-icon {
178
+ // position: absolute;
179
+ // top: 50%;
180
+ // left: 32px;
181
+ // transform: translate(0, -50%);
182
+ // }
183
+ // }
184
+ // }
@@ -0,0 +1,21 @@
1
+ @use "sass:map";
2
+ @use 'function' as *;
3
+
4
+ // 设置css变量值
5
+ @mixin set-css-var-value($name, $value) {
6
+ #{joinVarName($name)}: #{$value};
7
+ }
8
+
9
+ @mixin set-css-color-type($colors, $type) {
10
+ @include set-css-var-value(('color', $type), map.get($colors, $type, 'base'));
11
+ }
12
+
13
+ @mixin set-component-css-var($name, $variables) {
14
+ @each $attribute, $value in $variables {
15
+ @if $attribute == 'default' {
16
+ #{getCssVarName($name)}: $value;
17
+ } @else {
18
+ #{getCssVarName($name, $attribute)}: $value;
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,4 @@
1
+ $namespace: 'bwa' !default;
2
+ $element-separator: '__' !default;
3
+ $modifier-separator: '--' !default;
4
+ $state-prefix: 'is-' !default;
@@ -0,0 +1,62 @@
1
+ @use 'config';
2
+
3
+ @function selectorToString($selector) {
4
+ $selector: inspect($selector);
5
+ $selector: str-slice($selector, 2, -2);
6
+ @return $selector;
7
+ }
8
+
9
+ @function containModifier($selector) {
10
+ $selector: selectorToString($selector);
11
+
12
+ @if str-index($selector, config.$modifier-separator) {
13
+ @return true;
14
+ } @else {
15
+ @return false;
16
+ }
17
+ }
18
+
19
+ @function containWhenFlag($selector) {
20
+ $selector: selectorToString($selector);
21
+
22
+ @if str-index($selector, '.' + config.$state-prefix) {
23
+ @return true;
24
+ } @else {
25
+ @return false;
26
+ }
27
+ }
28
+
29
+ @function containPseudoClass($selector) {
30
+ $selector: selectorToString($selector);
31
+
32
+ @if str-index($selector, ':') {
33
+ @return true;
34
+ } @else {
35
+ @return false;
36
+ }
37
+ }
38
+
39
+ @function hitAllSpecialNestRule($selector) {
40
+ @return containModifier($selector) or containWhenFlag($selector) or
41
+ containPseudoClass($selector);
42
+ }
43
+
44
+ @function joinVarName($list) {
45
+ $name: '--' + config.$namespace;
46
+
47
+ @each $item in $list {
48
+ @if $item != '' {
49
+ $name: $name + '-' + $item;
50
+ }
51
+ }
52
+
53
+ @return $name;
54
+ }
55
+
56
+ @function getCssVarName($args...) {
57
+ @return joinVarName($args);
58
+ }
59
+
60
+ @function getCssVar($args...) {
61
+ @return var(#{joinVarName($args)});
62
+ }
@@ -0,0 +1,88 @@
1
+ @forward 'config';
2
+ @forward 'function';
3
+ @forward 'var';
4
+ @use 'config' as *;
5
+ @use 'function' as *;
6
+
7
+ @mixin b($block) {
8
+ $B: $namespace + '-' + $block !global;
9
+
10
+ .#{$B} {
11
+ @content;
12
+ }
13
+ }
14
+
15
+ @mixin e($element) {
16
+ $E: $element !global;
17
+ $selector: &;
18
+ $currentSelector: '';
19
+
20
+ @each $unit in $element {
21
+ $selectorItem: '.' + $B + $element-separator + $unit;
22
+ $currentSelector: $currentSelector + $selectorItem + ',';
23
+ }
24
+
25
+ @if hitAllSpecialNestRule($selector) {
26
+ // 如果有特殊的嵌套规则就需要保证父子关系
27
+ @at-root {
28
+ #{$selector} {
29
+ #{$currentSelector} {
30
+ @content;
31
+ }
32
+ }
33
+ }
34
+ } @else {
35
+ @at-root {
36
+ #{$currentSelector} {
37
+ @content;
38
+ }
39
+ }
40
+ }
41
+ }
42
+
43
+ @mixin m($modifier) {
44
+ $selector: &;
45
+ $currentSelector: '';
46
+
47
+ @each $unit in $modifier {
48
+ $selectorItem: $selector + $modifier-separator + $unit;
49
+ $currentSelector: $currentSelector + $selectorItem + ',';
50
+ }
51
+
52
+ @at-root {
53
+ #{$currentSelector} {
54
+ @content;
55
+ }
56
+ }
57
+ }
58
+
59
+ @mixin meb($modifer: false, $element: $E, $block: $B) {
60
+ $selector: &;
61
+ $modiferCombo: '';
62
+
63
+ @if $modifer {
64
+ $modiferCombo: $modifier-separator + $modifer;
65
+ }
66
+
67
+ @at-root {
68
+ #{$selector} {
69
+ .#{$block + $element-separator + $element + $modiferCombo} {
70
+ @content;
71
+ }
72
+ }
73
+ }
74
+ }
75
+
76
+ @mixin when($state) {
77
+ @at-root {
78
+ &.#{$state-prefix + $state} {
79
+ @content;
80
+ }
81
+ }
82
+ }
83
+
84
+ @mixin pseudo($pseudo) {
85
+ @at-root #{&}#{':#{$pseudo}'} {
86
+ @content;
87
+ }
88
+ }