vxe-gantt 3.4.2 → 3.4.3

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 (44) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +53 -53
  3. package/es/gantt/src/gantt.js +1 -1
  4. package/es/ui/index.js +1 -1
  5. package/es/ui/src/log.js +1 -1
  6. package/lib/gantt/src/gantt.js +1 -1
  7. package/lib/gantt/src/gantt.min.js +1 -1
  8. package/lib/index.umd.js +50 -50
  9. package/lib/index.umd.min.js +1 -1
  10. package/lib/ui/index.js +1 -1
  11. package/lib/ui/index.min.js +1 -1
  12. package/lib/ui/src/log.js +1 -1
  13. package/lib/ui/src/log.min.js +1 -1
  14. package/package.json +88 -88
  15. package/packages/components.ts +22 -22
  16. package/packages/gantt/index.ts +32 -32
  17. package/packages/gantt/src/gantt-body.ts +323 -323
  18. package/packages/gantt/src/gantt-chart.ts +542 -542
  19. package/packages/gantt/src/gantt-footer.ts +73 -73
  20. package/packages/gantt/src/gantt-header.ts +162 -162
  21. package/packages/gantt/src/gantt-view.ts +1954 -1954
  22. package/packages/gantt/src/gantt.ts +2827 -2827
  23. package/packages/gantt/src/static.ts +35 -35
  24. package/packages/gantt/src/util.ts +47 -47
  25. package/packages/index.ts +8 -8
  26. package/packages/ui/index.ts +119 -119
  27. package/packages/ui/src/comp.ts +3 -3
  28. package/packages/ui/src/depend.ts +14 -14
  29. package/packages/ui/src/dom.ts +196 -196
  30. package/packages/ui/src/log.ts +8 -8
  31. package/packages/ui/src/utils.ts +67 -67
  32. package/packages/ui/src/vn.ts +13 -13
  33. package/styles/all.scss +3 -3
  34. package/styles/base.scss +2 -2
  35. package/styles/components/gantt-module/gantt-chart.scss +261 -261
  36. package/styles/components/gantt.scss +707 -707
  37. package/styles/helpers/baseMixin.scss +95 -95
  38. package/styles/helpers/baseVar.scss +3 -3
  39. package/styles/helpers/placement.scss +38 -38
  40. package/styles/theme/base.scss +14 -14
  41. package/styles/theme/dark.scss +8 -8
  42. package/styles/theme/light.scss +8 -8
  43. package/types/all.d.ts +16 -16
  44. package/types/index.d.ts +4 -4
@@ -1,196 +1,196 @@
1
- import XEUtils from 'xe-utils'
2
-
3
- const reClsMap: { [key: string]: any } = {}
4
-
5
- let tpImgEl: HTMLImageElement | undefined
6
-
7
- export function initTpImg () {
8
- if (!tpImgEl) {
9
- tpImgEl = new Image()
10
- tpImgEl.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='
11
- }
12
- return tpImgEl
13
- }
14
-
15
- export function getTpImg () {
16
- if (!tpImgEl) {
17
- return initTpImg()
18
- }
19
- return tpImgEl
20
- }
21
-
22
- export function getPropClass (property: any, params: any) {
23
- return property ? XEUtils.isFunction(property) ? property(params) : property : ''
24
- }
25
-
26
- function getClsRE (cls: any) {
27
- if (!reClsMap[cls]) {
28
- reClsMap[cls] = new RegExp(`(?:^|\\s)${cls}(?!\\S)`, 'g')
29
- }
30
- return reClsMap[cls]
31
- }
32
-
33
- function getNodeOffset (elem: any, container: any, rest: any): any {
34
- if (elem) {
35
- const parentElem = elem.parentNode
36
- rest.top += elem.offsetTop
37
- rest.left += elem.offsetLeft
38
- if (parentElem && parentElem !== document.documentElement && parentElem !== document.body) {
39
- rest.top -= parentElem.scrollTop
40
- rest.left -= parentElem.scrollLeft
41
- }
42
- if (container && (elem === container || elem.offsetParent === container) ? 0 : elem.offsetParent) {
43
- return getNodeOffset(elem.offsetParent, container, rest)
44
- }
45
- }
46
- return rest
47
- }
48
-
49
- export function isPx (val: any) {
50
- return val && /^\d+(\.\d+)?(px)?$/.test(val)
51
- }
52
-
53
- export function isScale (val: any) {
54
- return val && /^\d+(\.\d+)?%$/.test(val)
55
- }
56
-
57
- export function hasClass (elem: any, cls: any) {
58
- return !!(elem && elem.className && elem.className.match && elem.className.match(getClsRE(cls)))
59
- }
60
-
61
- export function removeClass (elem: any, cls: any) {
62
- if (elem && hasClass(elem, cls)) {
63
- elem.className = elem.className.replace(getClsRE(cls), '')
64
- }
65
- }
66
-
67
- export function addClass (elem: any, cls: string) {
68
- if (elem && !hasClass(elem, cls)) {
69
- removeClass(elem, cls)
70
- elem.className = `${elem.className} ${cls}`
71
- }
72
- }
73
-
74
- export function hasControlKey (evnt: KeyboardEvent | MouseEvent | DragEvent) {
75
- return evnt.ctrlKey || evnt.metaKey
76
- }
77
-
78
- export function toCssUnit (val?: number | string, unit = 'px') {
79
- if (XEUtils.isNumber(val) || /^\d+$/.test(`${val}`)) {
80
- return `${val}${unit}`
81
- }
82
- return `${val || ''}`
83
- }
84
-
85
- export function queryElement (elem: HTMLTableCellElement, selector: string) {
86
- if (elem) {
87
- return elem.querySelector<HTMLElement>(selector)
88
- }
89
- return null
90
- }
91
-
92
- export function getDomNode () {
93
- const documentElement = document.documentElement
94
- const bodyElem = document.body
95
- return {
96
- scrollTop: documentElement.scrollTop || bodyElem.scrollTop,
97
- scrollLeft: documentElement.scrollLeft || bodyElem.scrollLeft,
98
- visibleHeight: documentElement.clientHeight || bodyElem.clientHeight,
99
- visibleWidth: documentElement.clientWidth || bodyElem.clientWidth
100
- }
101
- }
102
-
103
- export function getOffsetHeight (elem?: HTMLElement) {
104
- return elem ? elem.offsetHeight : 0
105
- }
106
-
107
- export function getPaddingTopBottomSize (elem: HTMLElement) {
108
- if (elem) {
109
- const computedStyle = getComputedStyle(elem)
110
- const paddingTop = XEUtils.toNumber(computedStyle.paddingTop)
111
- const paddingBottom = XEUtils.toNumber(computedStyle.paddingBottom)
112
- return paddingTop + paddingBottom
113
- }
114
- return 0
115
- }
116
-
117
- export function setScrollTop (elem: HTMLElement | null | undefined, scrollTop: number) {
118
- if (elem) {
119
- elem.scrollTop = scrollTop
120
- }
121
- }
122
-
123
- export function setScrollLeft (elem: HTMLElement | null | undefined, scrollLeft: number) {
124
- if (elem) {
125
- elem.scrollLeft = scrollLeft
126
- }
127
- }
128
-
129
- // export function setScrollLeftAndTop (elem: HTMLElement | null, scrollLeft: number, scrollTop: number) {
130
- // if (elem) {
131
- // elem.scrollLeft = scrollLeft
132
- // elem.scrollTop = scrollTop
133
- // }
134
- // }
135
-
136
- export function updateCellTitle (overflowElem: any, column: any) {
137
- const content = column.type === 'html' ? overflowElem.innerText : overflowElem.textContent
138
- if (overflowElem.getAttribute('title') !== content) {
139
- overflowElem.setAttribute('title', content)
140
- }
141
- }
142
-
143
- /**
144
- * 检查触发源是否属于目标节点
145
- */
146
- export function getEventTargetNode (evnt: any, container: any, queryCls?: string, queryMethod?: (target: Element) => boolean) {
147
- let targetElem
148
- let target = (evnt.target.shadowRoot && evnt.composed) ? (evnt.composedPath()[0] || evnt.target) : evnt.target
149
- while (target && target.nodeType && target !== document) {
150
- if (queryCls && hasClass(target, queryCls) && (!queryMethod || queryMethod(target))) {
151
- targetElem = target
152
- } else if (target === container) {
153
- return { flag: queryCls ? !!targetElem : true, container, targetElem: targetElem }
154
- }
155
- target = target.parentNode
156
- }
157
- return { flag: false }
158
- }
159
-
160
- /**
161
- * 获取元素相对于 document 的位置
162
- */
163
- export function getOffsetPos (elem: any, container: any) {
164
- return getNodeOffset(elem, container, { left: 0, top: 0 })
165
- }
166
-
167
- export function getAbsolutePos (elem: any) {
168
- const bounding = elem.getBoundingClientRect()
169
- const boundingTop = bounding.top
170
- const boundingLeft = bounding.left
171
- const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode()
172
- return { boundingTop, top: scrollTop + boundingTop, boundingLeft, left: scrollLeft + boundingLeft, visibleHeight, visibleWidth }
173
- }
174
-
175
- const scrollIntoViewIfNeeded = 'scrollIntoViewIfNeeded'
176
- const scrollIntoView = 'scrollIntoView'
177
-
178
- export function scrollToView (elem: any) {
179
- if (elem) {
180
- if (elem[scrollIntoViewIfNeeded]) {
181
- elem[scrollIntoViewIfNeeded]()
182
- } else if (elem[scrollIntoView]) {
183
- elem[scrollIntoView]()
184
- }
185
- }
186
- }
187
-
188
- export function triggerEvent (targetElem: Element, type: string) {
189
- if (targetElem) {
190
- targetElem.dispatchEvent(new Event(type))
191
- }
192
- }
193
-
194
- export function isNodeElement (elem: any): elem is HTMLElement {
195
- return elem && elem.nodeType === 1
196
- }
1
+ import XEUtils from 'xe-utils'
2
+
3
+ const reClsMap: { [key: string]: any } = {}
4
+
5
+ let tpImgEl: HTMLImageElement | undefined
6
+
7
+ export function initTpImg () {
8
+ if (!tpImgEl) {
9
+ tpImgEl = new Image()
10
+ tpImgEl.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='
11
+ }
12
+ return tpImgEl
13
+ }
14
+
15
+ export function getTpImg () {
16
+ if (!tpImgEl) {
17
+ return initTpImg()
18
+ }
19
+ return tpImgEl
20
+ }
21
+
22
+ export function getPropClass (property: any, params: any) {
23
+ return property ? XEUtils.isFunction(property) ? property(params) : property : ''
24
+ }
25
+
26
+ function getClsRE (cls: any) {
27
+ if (!reClsMap[cls]) {
28
+ reClsMap[cls] = new RegExp(`(?:^|\\s)${cls}(?!\\S)`, 'g')
29
+ }
30
+ return reClsMap[cls]
31
+ }
32
+
33
+ function getNodeOffset (elem: any, container: any, rest: any): any {
34
+ if (elem) {
35
+ const parentElem = elem.parentNode
36
+ rest.top += elem.offsetTop
37
+ rest.left += elem.offsetLeft
38
+ if (parentElem && parentElem !== document.documentElement && parentElem !== document.body) {
39
+ rest.top -= parentElem.scrollTop
40
+ rest.left -= parentElem.scrollLeft
41
+ }
42
+ if (container && (elem === container || elem.offsetParent === container) ? 0 : elem.offsetParent) {
43
+ return getNodeOffset(elem.offsetParent, container, rest)
44
+ }
45
+ }
46
+ return rest
47
+ }
48
+
49
+ export function isPx (val: any) {
50
+ return val && /^\d+(\.\d+)?(px)?$/.test(val)
51
+ }
52
+
53
+ export function isScale (val: any) {
54
+ return val && /^\d+(\.\d+)?%$/.test(val)
55
+ }
56
+
57
+ export function hasClass (elem: any, cls: any) {
58
+ return !!(elem && elem.className && elem.className.match && elem.className.match(getClsRE(cls)))
59
+ }
60
+
61
+ export function removeClass (elem: any, cls: any) {
62
+ if (elem && hasClass(elem, cls)) {
63
+ elem.className = elem.className.replace(getClsRE(cls), '')
64
+ }
65
+ }
66
+
67
+ export function addClass (elem: any, cls: string) {
68
+ if (elem && !hasClass(elem, cls)) {
69
+ removeClass(elem, cls)
70
+ elem.className = `${elem.className} ${cls}`
71
+ }
72
+ }
73
+
74
+ export function hasControlKey (evnt: KeyboardEvent | MouseEvent | DragEvent) {
75
+ return evnt.ctrlKey || evnt.metaKey
76
+ }
77
+
78
+ export function toCssUnit (val?: number | string, unit = 'px') {
79
+ if (XEUtils.isNumber(val) || /^\d+$/.test(`${val}`)) {
80
+ return `${val}${unit}`
81
+ }
82
+ return `${val || ''}`
83
+ }
84
+
85
+ export function queryElement (elem: HTMLTableCellElement, selector: string) {
86
+ if (elem) {
87
+ return elem.querySelector<HTMLElement>(selector)
88
+ }
89
+ return null
90
+ }
91
+
92
+ export function getDomNode () {
93
+ const documentElement = document.documentElement
94
+ const bodyElem = document.body
95
+ return {
96
+ scrollTop: documentElement.scrollTop || bodyElem.scrollTop,
97
+ scrollLeft: documentElement.scrollLeft || bodyElem.scrollLeft,
98
+ visibleHeight: documentElement.clientHeight || bodyElem.clientHeight,
99
+ visibleWidth: documentElement.clientWidth || bodyElem.clientWidth
100
+ }
101
+ }
102
+
103
+ export function getOffsetHeight (elem?: HTMLElement) {
104
+ return elem ? elem.offsetHeight : 0
105
+ }
106
+
107
+ export function getPaddingTopBottomSize (elem: HTMLElement) {
108
+ if (elem) {
109
+ const computedStyle = getComputedStyle(elem)
110
+ const paddingTop = XEUtils.toNumber(computedStyle.paddingTop)
111
+ const paddingBottom = XEUtils.toNumber(computedStyle.paddingBottom)
112
+ return paddingTop + paddingBottom
113
+ }
114
+ return 0
115
+ }
116
+
117
+ export function setScrollTop (elem: HTMLElement | null | undefined, scrollTop: number) {
118
+ if (elem) {
119
+ elem.scrollTop = scrollTop
120
+ }
121
+ }
122
+
123
+ export function setScrollLeft (elem: HTMLElement | null | undefined, scrollLeft: number) {
124
+ if (elem) {
125
+ elem.scrollLeft = scrollLeft
126
+ }
127
+ }
128
+
129
+ // export function setScrollLeftAndTop (elem: HTMLElement | null, scrollLeft: number, scrollTop: number) {
130
+ // if (elem) {
131
+ // elem.scrollLeft = scrollLeft
132
+ // elem.scrollTop = scrollTop
133
+ // }
134
+ // }
135
+
136
+ export function updateCellTitle (overflowElem: any, column: any) {
137
+ const content = column.type === 'html' ? overflowElem.innerText : overflowElem.textContent
138
+ if (overflowElem.getAttribute('title') !== content) {
139
+ overflowElem.setAttribute('title', content)
140
+ }
141
+ }
142
+
143
+ /**
144
+ * 检查触发源是否属于目标节点
145
+ */
146
+ export function getEventTargetNode (evnt: any, container: any, queryCls?: string, queryMethod?: (target: Element) => boolean) {
147
+ let targetElem
148
+ let target = (evnt.target.shadowRoot && evnt.composed) ? (evnt.composedPath()[0] || evnt.target) : evnt.target
149
+ while (target && target.nodeType && target !== document) {
150
+ if (queryCls && hasClass(target, queryCls) && (!queryMethod || queryMethod(target))) {
151
+ targetElem = target
152
+ } else if (target === container) {
153
+ return { flag: queryCls ? !!targetElem : true, container, targetElem: targetElem }
154
+ }
155
+ target = target.parentNode
156
+ }
157
+ return { flag: false }
158
+ }
159
+
160
+ /**
161
+ * 获取元素相对于 document 的位置
162
+ */
163
+ export function getOffsetPos (elem: any, container: any) {
164
+ return getNodeOffset(elem, container, { left: 0, top: 0 })
165
+ }
166
+
167
+ export function getAbsolutePos (elem: any) {
168
+ const bounding = elem.getBoundingClientRect()
169
+ const boundingTop = bounding.top
170
+ const boundingLeft = bounding.left
171
+ const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode()
172
+ return { boundingTop, top: scrollTop + boundingTop, boundingLeft, left: scrollLeft + boundingLeft, visibleHeight, visibleWidth }
173
+ }
174
+
175
+ const scrollIntoViewIfNeeded = 'scrollIntoViewIfNeeded'
176
+ const scrollIntoView = 'scrollIntoView'
177
+
178
+ export function scrollToView (elem: any) {
179
+ if (elem) {
180
+ if (elem[scrollIntoViewIfNeeded]) {
181
+ elem[scrollIntoViewIfNeeded]()
182
+ } else if (elem[scrollIntoView]) {
183
+ elem[scrollIntoView]()
184
+ }
185
+ }
186
+ }
187
+
188
+ export function triggerEvent (targetElem: Element, type: string) {
189
+ if (targetElem) {
190
+ targetElem.dispatchEvent(new Event(type))
191
+ }
192
+ }
193
+
194
+ export function isNodeElement (elem: any): elem is HTMLElement {
195
+ return elem && elem.nodeType === 1
196
+ }
@@ -1,8 +1,8 @@
1
- import { VxeUI } from '@vxe-ui/core'
2
-
3
- const { log } = VxeUI
4
-
5
- const version = `gantt v${process.env.VUE_APP_VXE_VERSION}`
6
-
7
- export const warnLog = log.create('warn', version)
8
- export const errLog = log.create('error', version)
1
+ import { VxeUI } from '@vxe-ui/core'
2
+
3
+ const { log } = VxeUI
4
+
5
+ const version = `gantt v${process.env.VUE_APP_VXE_VERSION}`
6
+
7
+ export const warnLog = log.create('warn', version)
8
+ export const errLog = log.create('error', version)
@@ -1,67 +1,67 @@
1
- import XEUtils from 'xe-utils'
2
- import { VxeUI } from '@vxe-ui/core'
3
- import DomZIndex from 'dom-zindex'
4
-
5
- const { getConfig } = VxeUI
6
-
7
- export function isEnableConf (conf: any): boolean {
8
- return conf && conf.enabled !== false
9
- }
10
-
11
- export function hasEnableConf (conf: any, opts: any): boolean {
12
- return opts && (conf ? opts.enabled !== false : opts.enabled)
13
- }
14
-
15
- export function isEmptyValue (cellValue: any) {
16
- return cellValue === null || cellValue === undefined || cellValue === ''
17
- }
18
-
19
- export function nextZIndex () {
20
- return DomZIndex.getNext()
21
- }
22
-
23
- export function getLastZIndex () {
24
- return DomZIndex.getCurrent()
25
- }
26
-
27
- export function nextSubZIndex () {
28
- return DomZIndex.getSubNext()
29
- }
30
-
31
- export function getSubLastZIndex () {
32
- return DomZIndex.getSubCurrent()
33
- }
34
-
35
- export function getGlobalDefaultConfig (value: any, globalValue: any) {
36
- if (XEUtils.eqNull(value)) {
37
- return globalValue
38
- }
39
- return value
40
- }
41
-
42
- export function getFuncText (content: string | number | boolean | null | undefined, args?: any) {
43
- if (content) {
44
- const translate = getConfig().translate
45
- return XEUtils.toValueString(translate ? translate('' + content, args) : content)
46
- }
47
- return ''
48
- }
49
-
50
- export function formatText (value: any, placeholder?: any) {
51
- return '' + (isEmptyValue(value) ? (placeholder ? VxeUI.getConfig().emptyCell : '') : value)
52
- }
53
-
54
- /**
55
- * 判断值为:'' | null | undefined 时都属于空值
56
- */
57
- export function eqEmptyValue (cellValue: any) {
58
- return cellValue === null || cellValue === undefined || cellValue === ''
59
- }
60
-
61
- export function getStringValue (cellValue: any) {
62
- return eqEmptyValue(cellValue) ? '' : cellValue
63
- }
64
-
65
- export function getClass (property: any, params: any) {
66
- return property ? XEUtils.isFunction(property) ? property(params) : property : ''
67
- }
1
+ import XEUtils from 'xe-utils'
2
+ import { VxeUI } from '@vxe-ui/core'
3
+ import DomZIndex from 'dom-zindex'
4
+
5
+ const { getConfig } = VxeUI
6
+
7
+ export function isEnableConf (conf: any): boolean {
8
+ return conf && conf.enabled !== false
9
+ }
10
+
11
+ export function hasEnableConf (conf: any, opts: any): boolean {
12
+ return opts && (conf ? opts.enabled !== false : opts.enabled)
13
+ }
14
+
15
+ export function isEmptyValue (cellValue: any) {
16
+ return cellValue === null || cellValue === undefined || cellValue === ''
17
+ }
18
+
19
+ export function nextZIndex () {
20
+ return DomZIndex.getNext()
21
+ }
22
+
23
+ export function getLastZIndex () {
24
+ return DomZIndex.getCurrent()
25
+ }
26
+
27
+ export function nextSubZIndex () {
28
+ return DomZIndex.getSubNext()
29
+ }
30
+
31
+ export function getSubLastZIndex () {
32
+ return DomZIndex.getSubCurrent()
33
+ }
34
+
35
+ export function getGlobalDefaultConfig (value: any, globalValue: any) {
36
+ if (XEUtils.eqNull(value)) {
37
+ return globalValue
38
+ }
39
+ return value
40
+ }
41
+
42
+ export function getFuncText (content: string | number | boolean | null | undefined, args?: any) {
43
+ if (content) {
44
+ const translate = getConfig().translate
45
+ return XEUtils.toValueString(translate ? translate('' + content, args) : content)
46
+ }
47
+ return ''
48
+ }
49
+
50
+ export function formatText (value: any, placeholder?: any) {
51
+ return '' + (isEmptyValue(value) ? (placeholder ? VxeUI.getConfig().emptyCell : '') : value)
52
+ }
53
+
54
+ /**
55
+ * 判断值为:'' | null | undefined 时都属于空值
56
+ */
57
+ export function eqEmptyValue (cellValue: any) {
58
+ return cellValue === null || cellValue === undefined || cellValue === ''
59
+ }
60
+
61
+ export function getStringValue (cellValue: any) {
62
+ return eqEmptyValue(cellValue) ? '' : cellValue
63
+ }
64
+
65
+ export function getClass (property: any, params: any) {
66
+ return property ? XEUtils.isFunction(property) ? property(params) : property : ''
67
+ }
@@ -1,13 +1,13 @@
1
- import XEUtils from 'xe-utils'
2
-
3
- import type { VxeComponentSlotType } from '../../../types'
4
-
5
- export function getSlotVNs (vns: VxeComponentSlotType | VxeComponentSlotType[] | undefined) {
6
- if (vns === null || vns === undefined) {
7
- return []
8
- }
9
- if (XEUtils.isArray(vns)) {
10
- return vns
11
- }
12
- return [vns]
13
- }
1
+ import XEUtils from 'xe-utils'
2
+
3
+ import type { VxeComponentSlotType } from '../../../types'
4
+
5
+ export function getSlotVNs (vns: VxeComponentSlotType | VxeComponentSlotType[] | undefined) {
6
+ if (vns === null || vns === undefined) {
7
+ return []
8
+ }
9
+ if (XEUtils.isArray(vns)) {
10
+ return vns
11
+ }
12
+ return [vns]
13
+ }
package/styles/all.scss CHANGED
@@ -1,3 +1,3 @@
1
- @use './base.scss';
2
-
3
- @use './components/gantt.scss';
1
+ @use './base.scss';
2
+
3
+ @use './components/gantt.scss';
package/styles/base.scss CHANGED
@@ -1,2 +1,2 @@
1
- @use './theme/light.scss';
2
- @use './theme/dark.scss';
1
+ @use './theme/light.scss';
2
+ @use './theme/dark.scss';