@phoenix-cg/v-tabs 0.2.1 → 0.2.2
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.
- package/dist/v-tabs.css +1 -1
- package/dist/v-tabs.es.js +116 -66
- package/dist/v-tabs.umd.js +1 -1
- package/package.json +1 -1
- package/src/components/VTabs.vue +107 -24
- package/.vscode/extensions.json +0 -8
- package/.vscode/settings.json +0 -11
package/dist/v-tabs.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.v-tabs{position:relative}.v-tabs_inner{display:flex}.v-tabs_tab{padding:10px 20px;background:#ddd;cursor:pointer;-webkit-user-select:none;user-select:none}.v-tabs_tab.__active{background:#b6b5b5}.v-tabs.__disabled{pointer-events:none;opacity:.5}.v-tabs_slider{position:absolute;height:2px;background:#000;left:0;bottom:0;transition:all .2s ease-in-out}
|
|
1
|
+
.v-tabs-wrap{position:relative;display:inline-flex;max-width:100%}.v-tabs{position:relative}.v-tabs_inner{display:flex}.v-tabs_tab{padding:10px 20px;background:#ddd;cursor:pointer;-webkit-user-select:none;user-select:none}.v-tabs_tab.__active{background:#b6b5b5}.v-tabs.__disabled{pointer-events:none;opacity:.5}.v-tabs_slider{position:absolute;height:2px;background:#000;left:0;bottom:0;transition:all .2s ease-in-out}.v-tabs-hint{transition:opacity .3s ease-in-out;opacity:0;pointer-events:none}.v-tabs-hint.__visible{opacity:1}
|
package/dist/v-tabs.es.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { mergeModels as
|
|
2
|
-
const
|
|
1
|
+
import { mergeModels as S, useModel as F, ref as b, useTemplateRef as w, computed as M, onMounted as P, onBeforeUnmount as q, watch as g, createElementBlock as r, openBlock as n, createElementVNode as k, createBlock as B, normalizeClass as C, createCommentVNode as I, Fragment as T, renderList as A, resolveDynamicComponent as H, mergeProps as U, withCtx as X, renderSlot as j, toDisplayString as _, createTextVNode as G, normalizeStyle as J, unref as K, nextTick as Q } from "vue";
|
|
2
|
+
const W = { class: "v-tabs-wrap" }, Y = { class: "v-tabs_inner" }, Z = {
|
|
3
3
|
key: 0,
|
|
4
4
|
class: "v-tabs_tab_title"
|
|
5
|
-
},
|
|
5
|
+
}, te = {
|
|
6
6
|
__name: "VTabs",
|
|
7
|
-
props: /* @__PURE__ */
|
|
7
|
+
props: /* @__PURE__ */ S({
|
|
8
8
|
direction: {
|
|
9
9
|
type: String,
|
|
10
10
|
default: "horizontal"
|
|
@@ -36,87 +36,137 @@ const A = { class: "v-tabs_inner" }, D = ["data-id", "onClick"], P = {
|
|
|
36
36
|
wrapTitle: {
|
|
37
37
|
type: Boolean,
|
|
38
38
|
default: !1
|
|
39
|
+
},
|
|
40
|
+
mobileHintComponent: {
|
|
41
|
+
type: String
|
|
42
|
+
},
|
|
43
|
+
mobileHintShowDelay: {
|
|
44
|
+
type: Number,
|
|
45
|
+
default: 1500
|
|
46
|
+
},
|
|
47
|
+
mobileHintHideDelay: {
|
|
48
|
+
type: Number,
|
|
49
|
+
default: 2e3
|
|
50
|
+
},
|
|
51
|
+
tabComponent: {
|
|
52
|
+
type: String,
|
|
53
|
+
default: "div"
|
|
54
|
+
},
|
|
55
|
+
tabProps: {
|
|
56
|
+
type: Function,
|
|
57
|
+
default: () => ({})
|
|
39
58
|
}
|
|
40
59
|
}, {
|
|
41
60
|
modelValue: {},
|
|
42
61
|
modelModifiers: {}
|
|
43
62
|
}),
|
|
44
|
-
emits: /* @__PURE__ */
|
|
45
|
-
setup(
|
|
46
|
-
const e =
|
|
47
|
-
let
|
|
48
|
-
const
|
|
49
|
-
function
|
|
50
|
-
e.withSlider && (
|
|
51
|
-
|
|
52
|
-
}),
|
|
53
|
-
|
|
63
|
+
emits: /* @__PURE__ */ S(["update:modelValue"], ["update:modelValue"]),
|
|
64
|
+
setup(i, { emit: V }) {
|
|
65
|
+
const e = i, s = F(i, "modelValue"), R = V, v = b({});
|
|
66
|
+
let a = null, c = b(!1), u = b(null);
|
|
67
|
+
const N = w("tabs"), d = w("root"), y = M(() => e.mobileHintComponent);
|
|
68
|
+
function x() {
|
|
69
|
+
e.withSlider && (a = new ResizeObserver(() => {
|
|
70
|
+
m();
|
|
71
|
+
}), N.value.forEach((t) => {
|
|
72
|
+
a.observe(t);
|
|
54
73
|
}));
|
|
55
74
|
}
|
|
56
|
-
function
|
|
57
|
-
|
|
75
|
+
function D() {
|
|
76
|
+
a == null || a.disconnect(), a = null;
|
|
77
|
+
}
|
|
78
|
+
function h() {
|
|
79
|
+
y.value && (u.value = new IntersectionObserver((t, o) => {
|
|
80
|
+
t.forEach((l) => {
|
|
81
|
+
l.isIntersecting && (E(), o.disconnect(), u.value = null);
|
|
82
|
+
});
|
|
83
|
+
}, {
|
|
84
|
+
threshold: 1
|
|
85
|
+
}), u.value.observe(d.value));
|
|
86
|
+
}
|
|
87
|
+
function E() {
|
|
88
|
+
setTimeout(() => {
|
|
89
|
+
c.value = !0, z();
|
|
90
|
+
}, e.mobileHintShowDelay);
|
|
91
|
+
}
|
|
92
|
+
function z() {
|
|
93
|
+
setTimeout(() => {
|
|
94
|
+
c.value = !1;
|
|
95
|
+
}, e.mobileHintShowDelay);
|
|
58
96
|
}
|
|
59
|
-
function
|
|
60
|
-
|
|
97
|
+
function f(t) {
|
|
98
|
+
R("update:modelValue", t), m();
|
|
61
99
|
}
|
|
62
|
-
async function
|
|
63
|
-
if (!e.withSlider || !
|
|
100
|
+
async function m() {
|
|
101
|
+
if (!e.withSlider || !d.value)
|
|
64
102
|
return;
|
|
65
|
-
const t =
|
|
66
|
-
await
|
|
103
|
+
const t = d.value;
|
|
104
|
+
await Q();
|
|
67
105
|
const { left: o } = t.getBoundingClientRect(), [l] = t.getElementsByClassName("__active");
|
|
68
106
|
if (l) {
|
|
69
107
|
const {
|
|
70
|
-
left:
|
|
71
|
-
width:
|
|
72
|
-
} = l.getBoundingClientRect(),
|
|
73
|
-
|
|
74
|
-
transform: `translateX(${
|
|
75
|
-
width: `${
|
|
108
|
+
left: p,
|
|
109
|
+
width: L
|
|
110
|
+
} = l.getBoundingClientRect(), O = t.scrollLeft, $ = p + O - o;
|
|
111
|
+
v.value = {
|
|
112
|
+
transform: `translateX(${$}px)`,
|
|
113
|
+
width: `${L}px`
|
|
76
114
|
};
|
|
77
115
|
}
|
|
78
116
|
}
|
|
79
|
-
return
|
|
80
|
-
if (e.selectFirst && e.list.length && !
|
|
117
|
+
return P(() => {
|
|
118
|
+
if (e.selectFirst && e.list.length && !s.value && f(e.list[0]), e.initialTab && e.list.length && !s.value) {
|
|
81
119
|
const t = e.list.find((o) => o[e.trackBy] === e.initialTab);
|
|
82
|
-
t &&
|
|
120
|
+
t && f(t);
|
|
83
121
|
}
|
|
84
|
-
|
|
85
|
-
}),
|
|
86
|
-
|
|
87
|
-
}),
|
|
88
|
-
e.withSlider &&
|
|
89
|
-
}), (
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
122
|
+
x(), h();
|
|
123
|
+
}), q(() => {
|
|
124
|
+
D();
|
|
125
|
+
}), g(s, () => {
|
|
126
|
+
e.withSlider && m();
|
|
127
|
+
}), g(y, () => {
|
|
128
|
+
h();
|
|
129
|
+
}), (t, o) => (n(), r("div", W, [
|
|
130
|
+
k("div", {
|
|
131
|
+
class: C(["v-tabs", [`__${e.direction}`]]),
|
|
132
|
+
ref: "root"
|
|
133
|
+
}, [
|
|
134
|
+
k("div", Y, [
|
|
135
|
+
(n(!0), r(T, null, A(e.list, (l) => (n(), B(H(e.tabComponent), U({
|
|
136
|
+
key: l[i.trackBy],
|
|
137
|
+
ref_for: !0,
|
|
138
|
+
ref: "tabs",
|
|
139
|
+
class: "v-tabs_tab"
|
|
140
|
+
}, e.tabProps, {
|
|
141
|
+
"data-id": l[i.trackBy],
|
|
142
|
+
class: {
|
|
143
|
+
__active: s.value && s.value[i.trackBy] === l[i.trackBy],
|
|
144
|
+
_disabled: l && l._disabled
|
|
145
|
+
},
|
|
146
|
+
onClick: (p) => f(l)
|
|
147
|
+
}), {
|
|
148
|
+
default: X(() => [
|
|
149
|
+
j(t.$slots, "single-tab", { tab: l }, () => [
|
|
150
|
+
i.wrapTitle ? (n(), r("div", Z, _(l[i.label] || ""), 1)) : (n(), r(T, { key: 1 }, [
|
|
151
|
+
G(_(l[i.label] || ""), 1)
|
|
152
|
+
], 64))
|
|
153
|
+
])
|
|
154
|
+
]),
|
|
155
|
+
_: 2
|
|
156
|
+
}, 1040, ["data-id", "class", "onClick"]))), 128))
|
|
157
|
+
]),
|
|
158
|
+
e.withSlider ? (n(), r("div", {
|
|
159
|
+
key: 0,
|
|
160
|
+
style: J(v.value),
|
|
161
|
+
class: "v-tabs_slider"
|
|
162
|
+
}, null, 4)) : I("", !0)
|
|
163
|
+
], 2),
|
|
164
|
+
(n(), B(H(e.mobileHintComponent), {
|
|
165
|
+
class: C(["v-tabs-hint", { __visible: K(c) }])
|
|
166
|
+
}, null, 8, ["class"]))
|
|
167
|
+
]));
|
|
118
168
|
}
|
|
119
169
|
};
|
|
120
170
|
export {
|
|
121
|
-
|
|
171
|
+
te as default
|
|
122
172
|
};
|
package/dist/v-tabs.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,
|
|
1
|
+
(function(e,s){typeof exports=="object"&&typeof module<"u"?module.exports=s(require("vue")):typeof define=="function"&&define.amd?define(["vue"],s):(e=typeof globalThis<"u"?globalThis:e||self,e.VTabs=s(e.Vue))})(this,function(e){"use strict";const s={class:"v-tabs-wrap"},k={class:"v-tabs_inner"},B={key:0,class:"v-tabs_tab_title"};return{__name:"VTabs",props:e.mergeModels({direction:{type:String,default:"horizontal"},trackBy:{type:String,default:"_id"},label:{type:String,default:"title"},list:{type:Array,required:!0},selectFirst:{type:Boolean,default:!0},withSlider:{type:Boolean,default:!1},initialTab:{type:[Number,String],default:null},wrapTitle:{type:Boolean,default:!1},mobileHintComponent:{type:String},mobileHintShowDelay:{type:Number,default:1500},mobileHintHideDelay:{type:Number,default:2e3},tabComponent:{type:String,default:"div"},tabProps:{type:Function,default:()=>({})}},{modelValue:{},modelModifiers:{}}),emits:e.mergeModels(["update:modelValue"],["update:modelValue"]),setup(i,{emit:S}){const t=i,r=e.useModel(i,"modelValue"),g=S,b=e.ref({});let o=null,c=e.ref(!1),d=e.ref(null);const w=e.useTemplateRef("tabs"),f=e.useTemplateRef("root"),y=e.computed(()=>t.mobileHintComponent);function T(){t.withSlider&&(o=new ResizeObserver(()=>{u()}),w.value.forEach(l=>{o.observe(l)}))}function C(){o==null||o.disconnect(),o=null}function p(){y.value&&(d.value=new IntersectionObserver((l,a)=>{l.forEach(n=>{n.isIntersecting&&(_(),a.disconnect(),d.value=null)})},{threshold:1}),d.value.observe(f.value))}function _(){setTimeout(()=>{c.value=!0,H()},t.mobileHintShowDelay)}function H(){setTimeout(()=>{c.value=!1},t.mobileHintShowDelay)}function m(l){g("update:modelValue",l),u()}async function u(){if(!t.withSlider||!f.value)return;const l=f.value;await e.nextTick();const{left:a}=l.getBoundingClientRect(),[n]=l.getElementsByClassName("__active");if(n){const{left:h,width:V}=n.getBoundingClientRect(),E=l.scrollLeft,R=h+E-a;b.value={transform:`translateX(${R}px)`,width:`${V}px`}}}return e.onMounted(()=>{if(t.selectFirst&&t.list.length&&!r.value&&m(t.list[0]),t.initialTab&&t.list.length&&!r.value){const l=t.list.find(a=>a[t.trackBy]===t.initialTab);l&&m(l)}T(),p()}),e.onBeforeUnmount(()=>{C()}),e.watch(r,()=>{t.withSlider&&u()}),e.watch(y,()=>{p()}),(l,a)=>(e.openBlock(),e.createElementBlock("div",s,[e.createElementVNode("div",{class:e.normalizeClass(["v-tabs",[`__${t.direction}`]]),ref:"root"},[e.createElementVNode("div",k,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.list,n=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.tabComponent),e.mergeProps({key:n[i.trackBy],ref_for:!0,ref:"tabs",class:"v-tabs_tab"},t.tabProps,{"data-id":n[i.trackBy],class:{__active:r.value&&r.value[i.trackBy]===n[i.trackBy],_disabled:n&&n._disabled},onClick:h=>m(n)}),{default:e.withCtx(()=>[e.renderSlot(l.$slots,"single-tab",{tab:n},()=>[i.wrapTitle?(e.openBlock(),e.createElementBlock("div",B,e.toDisplayString(n[i.label]||""),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(n[i.label]||""),1)],64))])]),_:2},1040,["data-id","class","onClick"]))),128))]),t.withSlider?(e.openBlock(),e.createElementBlock("div",{key:0,style:e.normalizeStyle(b.value),class:"v-tabs_slider"},null,4)):e.createCommentVNode("",!0)],2),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.mobileHintComponent),{class:e.normalizeClass(["v-tabs-hint",{__visible:e.unref(c)}])},null,8,["class"]))]))}}});
|
package/package.json
CHANGED
package/src/components/VTabs.vue
CHANGED
|
@@ -1,36 +1,46 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="v-tabs"
|
|
3
|
-
<div class="v-
|
|
4
|
-
<div
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
2
|
+
<div class="v-tabs-wrap">
|
|
3
|
+
<div class="v-tabs" :class="[`__${props.direction}`]" ref="root">
|
|
4
|
+
<div class="v-tabs_inner">
|
|
5
|
+
<component
|
|
6
|
+
:is="props.tabComponent"
|
|
7
|
+
v-for="tab in props.list"
|
|
8
|
+
:key="tab[trackBy]"
|
|
9
|
+
ref="tabs"
|
|
10
|
+
class="v-tabs_tab"
|
|
11
|
+
v-bind="props.tabProps"
|
|
12
|
+
:data-id="tab[trackBy]"
|
|
13
|
+
:class="{
|
|
14
|
+
__active: model && model[trackBy] === tab[trackBy],
|
|
15
|
+
_disabled: tab && tab._disabled
|
|
16
|
+
}"
|
|
17
|
+
@click="handleTabSelect(tab, $event)"
|
|
18
|
+
>
|
|
19
|
+
<slot name="single-tab" :tab="tab">
|
|
20
|
+
<template v-if="wrapTitle">
|
|
21
|
+
<div class="v-tabs_tab_title">
|
|
22
|
+
{{ tab[label] || "" }}
|
|
23
|
+
</div>
|
|
24
|
+
</template>
|
|
25
|
+
<template v-else>
|
|
19
26
|
{{ tab[label] || "" }}
|
|
20
|
-
</
|
|
21
|
-
</
|
|
22
|
-
|
|
23
|
-
{{ tab[label] || "" }}
|
|
24
|
-
</template>
|
|
25
|
-
</slot>
|
|
27
|
+
</template>
|
|
28
|
+
</slot>
|
|
29
|
+
</component>
|
|
26
30
|
</div>
|
|
31
|
+
<div v-if="props.withSlider" :style="sliderStyle" class="v-tabs_slider" />
|
|
27
32
|
</div>
|
|
28
|
-
<
|
|
33
|
+
<component
|
|
34
|
+
:is="props.mobileHintComponent"
|
|
35
|
+
class="v-tabs-hint"
|
|
36
|
+
:class="{ __visible: isHintVisible }"
|
|
37
|
+
/>
|
|
29
38
|
</div>
|
|
30
39
|
</template>
|
|
31
40
|
|
|
32
41
|
<script setup>
|
|
33
42
|
import {
|
|
43
|
+
computed,
|
|
34
44
|
nextTick,
|
|
35
45
|
onBeforeUnmount,
|
|
36
46
|
onMounted,
|
|
@@ -70,15 +80,38 @@ const props = defineProps({
|
|
|
70
80
|
wrapTitle: {
|
|
71
81
|
type: Boolean,
|
|
72
82
|
default: false
|
|
83
|
+
},
|
|
84
|
+
mobileHintComponent: {
|
|
85
|
+
type: String
|
|
86
|
+
},
|
|
87
|
+
mobileHintShowDelay: {
|
|
88
|
+
type: Number,
|
|
89
|
+
default: 1500
|
|
90
|
+
},
|
|
91
|
+
mobileHintHideDelay: {
|
|
92
|
+
type: Number,
|
|
93
|
+
default: 2000
|
|
94
|
+
},
|
|
95
|
+
tabComponent: {
|
|
96
|
+
type: String,
|
|
97
|
+
default: 'div'
|
|
98
|
+
},
|
|
99
|
+
tabProps: {
|
|
100
|
+
type: Function,
|
|
101
|
+
default: () => ({})
|
|
73
102
|
}
|
|
74
103
|
})
|
|
75
104
|
const model = defineModel()
|
|
76
105
|
const emit = defineEmits(['update:modelValue'])
|
|
77
106
|
const sliderStyle = ref({})
|
|
78
107
|
let resizeObserver = null
|
|
108
|
+
let isHintVisible = ref(false)
|
|
109
|
+
let hintObserver = ref(null)
|
|
79
110
|
const tabsRefs = useTemplateRef('tabs')
|
|
80
111
|
const elRef = useTemplateRef('root')
|
|
81
112
|
|
|
113
|
+
const hintShowCondition = computed(() => props.mobileHintComponent)
|
|
114
|
+
|
|
82
115
|
function createResizeObserver () {
|
|
83
116
|
if (props.withSlider) {
|
|
84
117
|
resizeObserver = new ResizeObserver(() => {
|
|
@@ -95,6 +128,36 @@ function destroyResizeObserver () {
|
|
|
95
128
|
resizeObserver = null
|
|
96
129
|
}
|
|
97
130
|
|
|
131
|
+
function createHintObserver () {
|
|
132
|
+
if (hintShowCondition.value) {
|
|
133
|
+
hintObserver.value = new IntersectionObserver((entries, observer) => {
|
|
134
|
+
entries.forEach(entry => {
|
|
135
|
+
if (entry.isIntersecting) {
|
|
136
|
+
queueShowHint()
|
|
137
|
+
observer.disconnect()
|
|
138
|
+
hintObserver.value = null
|
|
139
|
+
}
|
|
140
|
+
})
|
|
141
|
+
}, {
|
|
142
|
+
threshold: 1.0
|
|
143
|
+
})
|
|
144
|
+
hintObserver.value.observe(elRef.value)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function queueShowHint () {
|
|
149
|
+
setTimeout(() => {
|
|
150
|
+
isHintVisible.value = true
|
|
151
|
+
queueHideHint()
|
|
152
|
+
}, props.mobileHintShowDelay)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function queueHideHint () {
|
|
156
|
+
setTimeout(() => {
|
|
157
|
+
isHintVisible.value = false
|
|
158
|
+
}, props.mobileHintShowDelay)
|
|
159
|
+
}
|
|
160
|
+
|
|
98
161
|
function handleTabSelect (tab) {
|
|
99
162
|
emit('update:modelValue', tab)
|
|
100
163
|
calcSlider()
|
|
@@ -131,6 +194,7 @@ onMounted(() => {
|
|
|
131
194
|
tab && handleTabSelect(tab)
|
|
132
195
|
}
|
|
133
196
|
createResizeObserver()
|
|
197
|
+
createHintObserver()
|
|
134
198
|
})
|
|
135
199
|
|
|
136
200
|
onBeforeUnmount(() => {
|
|
@@ -140,9 +204,20 @@ onBeforeUnmount(() => {
|
|
|
140
204
|
watch(model, () => {
|
|
141
205
|
props.withSlider && calcSlider()
|
|
142
206
|
})
|
|
207
|
+
|
|
208
|
+
watch(hintShowCondition, () => {
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
createHintObserver()
|
|
212
|
+
})
|
|
143
213
|
</script>
|
|
144
214
|
|
|
145
215
|
<style>
|
|
216
|
+
.v-tabs-wrap {
|
|
217
|
+
position: relative;
|
|
218
|
+
display: inline-flex;
|
|
219
|
+
max-width: 100%;
|
|
220
|
+
}
|
|
146
221
|
.v-tabs {
|
|
147
222
|
position: relative;
|
|
148
223
|
}
|
|
@@ -170,4 +245,12 @@ watch(model, () => {
|
|
|
170
245
|
bottom: 0;
|
|
171
246
|
transition: all 0.2s ease-in-out;
|
|
172
247
|
}
|
|
248
|
+
.v-tabs-hint {
|
|
249
|
+
transition: opacity .3s ease-in-out;
|
|
250
|
+
opacity: 0;
|
|
251
|
+
pointer-events: none;
|
|
252
|
+
}
|
|
253
|
+
.v-tabs-hint.__visible {
|
|
254
|
+
opacity: 1;
|
|
255
|
+
}
|
|
173
256
|
</style>
|
package/.vscode/extensions.json
DELETED
package/.vscode/settings.json
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"explorer.fileNesting.enabled": true,
|
|
3
|
-
"explorer.fileNesting.patterns": {
|
|
4
|
-
"tsconfig.json": "tsconfig.*.json, env.d.ts",
|
|
5
|
-
"vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*",
|
|
6
|
-
"package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .prettier*, prettier*, .editorconfig"
|
|
7
|
-
},
|
|
8
|
-
"editor.codeActionsOnSave": {
|
|
9
|
-
"source.fixAll": "explicit"
|
|
10
|
-
}
|
|
11
|
-
}
|