@globalbrain/sefirot 2.39.0 → 2.40.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.
- package/lib/components/SCard.vue +8 -1
- package/lib/components/SCardBlock.vue +1 -1
- package/lib/components/SCardFooter.vue +9 -1
- package/lib/components/SCardFooterActions.vue +3 -1
- package/lib/components/SContent.vue +78 -0
- package/lib/components/SDesc.vue +14 -0
- package/lib/components/SDescDay.vue +52 -0
- package/lib/components/SDescEmpty.vue +19 -0
- package/lib/components/SDescItem.vue +13 -0
- package/lib/components/SDescLabel.vue +31 -0
- package/lib/components/SDescLink.vue +59 -0
- package/lib/components/SDescNumber.vue +50 -0
- package/lib/components/SDescPill.vue +51 -0
- package/lib/components/SDescState.vue +35 -0
- package/lib/components/SDescText.vue +61 -0
- package/lib/components/SDropdown.vue +1 -0
- package/lib/components/SGrid.vue +27 -0
- package/lib/components/SGridItem.vue +14 -0
- package/lib/components/SHead.vue +5 -0
- package/lib/components/SHeadLead.vue +22 -0
- package/lib/components/SHeadTitle.vue +14 -0
- package/lib/components/SInputHMS.vue +1 -1
- package/lib/composables/Markdown.ts +1 -1
- package/lib/mixins/Card.ts +27 -15
- package/lib/mixins/Desc.ts +39 -0
- package/lib/mixins/Grid.ts +15 -0
- package/lib/mixins/Head.ts +18 -0
- package/lib/mixins/Sheet.ts +19 -11
- package/package.json +6 -6
package/lib/components/SCard.vue
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { provideCardState } from '../composables/Card'
|
|
3
3
|
|
|
4
|
-
export type Size = 'small' | 'medium'
|
|
4
|
+
export type Size = 'small' | 'medium' | 'large'
|
|
5
5
|
|
|
6
6
|
defineProps<{
|
|
7
7
|
size?: Size
|
|
@@ -55,6 +55,13 @@ const { isCollapsed } = provideCardState()
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
&.medium {
|
|
58
|
+
@media (min-width: 736px) {
|
|
59
|
+
margin: 48px auto 128px;
|
|
60
|
+
max-width: 640px;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
&.large {
|
|
58
65
|
@media (min-width: 864px) {
|
|
59
66
|
margin: 48px auto 128px;
|
|
60
67
|
max-width: 768px;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
export type Space = 'compact' | 'wide'
|
|
3
|
+
|
|
4
|
+
defineProps<{
|
|
5
|
+
space?: Space
|
|
6
|
+
}>()
|
|
7
|
+
</script>
|
|
8
|
+
|
|
1
9
|
<template>
|
|
2
|
-
<div class="SCardFooter">
|
|
10
|
+
<div class="SCardFooter" :class="[space ?? 'compact']">
|
|
3
11
|
<slot />
|
|
4
12
|
</div>
|
|
5
13
|
</template>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="SContent">
|
|
3
|
+
<slot />
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<style scoped lang="postcss">
|
|
8
|
+
.SContent {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
gap: 12px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.SContent :deep(p) {
|
|
15
|
+
margin: 0;
|
|
16
|
+
line-height: 24px;
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
font-weight: 400;
|
|
19
|
+
color: var(--c-text-1);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.SContent :deep(strong) {
|
|
23
|
+
font-weight: 600;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.SContent :deep(a) {
|
|
27
|
+
color: var(--c-info-text);
|
|
28
|
+
transition: color 0.25s;
|
|
29
|
+
|
|
30
|
+
&:hover {
|
|
31
|
+
color: var(--c-info-text-dark);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.SContent :deep(ul),
|
|
36
|
+
.SContent :deep(ol) {
|
|
37
|
+
margin: 0;
|
|
38
|
+
padding-left: 0;
|
|
39
|
+
list-style: none;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.SContent :deep(ol) {
|
|
43
|
+
counter-reset: s-medium-counter;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.SContent :deep(li) {
|
|
47
|
+
position: relative;
|
|
48
|
+
margin: 0;
|
|
49
|
+
padding-left: 20px;
|
|
50
|
+
line-height: 24px;
|
|
51
|
+
font-size: 14px;
|
|
52
|
+
font-weight: 400;
|
|
53
|
+
color: var(--c-text-1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.SContent :deep(ul > li::before) {
|
|
57
|
+
position: absolute;
|
|
58
|
+
top: 8px;
|
|
59
|
+
left: 2px;
|
|
60
|
+
width: 8px;
|
|
61
|
+
height: 8px;
|
|
62
|
+
border-radius: 50%;
|
|
63
|
+
background-color: var(--c-text-3);
|
|
64
|
+
content: "";
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.SContent :deep(ol > li) {
|
|
68
|
+
counter-increment: s-medium-counter;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.SContent :deep(ol > li::before) {
|
|
72
|
+
margin-right: 3px;
|
|
73
|
+
margin-left: -20px;
|
|
74
|
+
color: var(--c-text-2);
|
|
75
|
+
font-feature-settings: "tnum";
|
|
76
|
+
content: counter(s-medium-counter)". ";
|
|
77
|
+
}
|
|
78
|
+
</style>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, useSlots } from 'vue'
|
|
3
|
+
import { type Day } from '../support/Day'
|
|
4
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<{
|
|
7
|
+
value?: Day | null
|
|
8
|
+
format?: string
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
const slots = useSlots()
|
|
12
|
+
|
|
13
|
+
const _value = computed(() => {
|
|
14
|
+
const slotValue = slots.default?.()[0].children
|
|
15
|
+
|
|
16
|
+
if (typeof slotValue === 'string') {
|
|
17
|
+
return slotValue
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (props.value) {
|
|
21
|
+
return props.value.format(props.format ?? 'YYYY-MM-DD HH:mm:ss')
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return null
|
|
25
|
+
})
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<div v-if="_value" class="SDescDay">
|
|
30
|
+
<div class="value">
|
|
31
|
+
{{ _value }}
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
<SDescEmpty v-else />
|
|
35
|
+
</template>
|
|
36
|
+
|
|
37
|
+
<style scoped lang="postcss">
|
|
38
|
+
.SDescDay {
|
|
39
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
40
|
+
padding-bottom: 7px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.value {
|
|
44
|
+
line-height: 24px;
|
|
45
|
+
font-size: 14px;
|
|
46
|
+
font-weight: 400;
|
|
47
|
+
font-feature-settings: "tnum";
|
|
48
|
+
white-space: nowrap;
|
|
49
|
+
overflow: hidden;
|
|
50
|
+
text-overflow: ellipsis;
|
|
51
|
+
}
|
|
52
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="SDescEmpty">
|
|
3
|
+
<div class="value">—</div>
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<style scoped lang="postcss">
|
|
8
|
+
.SDescEmpty {
|
|
9
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
10
|
+
padding-bottom: 7px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.value {
|
|
14
|
+
line-height: 24px;
|
|
15
|
+
font-size: 14px;
|
|
16
|
+
font-weight: 400;
|
|
17
|
+
color: var(--c-text-3);
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
defineProps<{
|
|
3
|
+
value?: string | null
|
|
4
|
+
}>()
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<div class="SDescLabel">
|
|
9
|
+
<div class="value">
|
|
10
|
+
<slot v-if="$slots.default" />
|
|
11
|
+
<template v-else>{{ value }}</template>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<style scoped lang="postcss">
|
|
17
|
+
.SDescLabel {
|
|
18
|
+
display: flex;
|
|
19
|
+
height: 24px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.value {
|
|
23
|
+
line-height: 24px;
|
|
24
|
+
font-size: 12px;
|
|
25
|
+
font-weight: 500;
|
|
26
|
+
color: var(--c-text-2);
|
|
27
|
+
white-space: nowrap;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
text-overflow: ellipsis;
|
|
30
|
+
}
|
|
31
|
+
</style>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, useSlots } from 'vue'
|
|
3
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
4
|
+
import SLink from './SLink.vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<{
|
|
7
|
+
value?: string | null
|
|
8
|
+
href?: string
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
const slots = useSlots()
|
|
12
|
+
|
|
13
|
+
const link = computed(() => {
|
|
14
|
+
if (props.href) {
|
|
15
|
+
return props.href
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const slotValue = slots.default?.()[0].children
|
|
19
|
+
|
|
20
|
+
if (typeof slotValue === 'string') {
|
|
21
|
+
return slotValue
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return props.value
|
|
25
|
+
})
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<div v-if="$slots.default || value" class="SDescLink">
|
|
30
|
+
<SLink class="value" :href="link">
|
|
31
|
+
<slot v-if="$slots.default" />
|
|
32
|
+
<template v-else>{{ value }}</template>
|
|
33
|
+
</SLink>
|
|
34
|
+
</div>
|
|
35
|
+
<SDescEmpty v-else />
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<style scoped lang="postcss">
|
|
39
|
+
.SDescLink {
|
|
40
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
41
|
+
padding-bottom: 7px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.value {
|
|
45
|
+
display: block;
|
|
46
|
+
line-height: 24px;
|
|
47
|
+
font-size: 14px;
|
|
48
|
+
font-weight: 400;
|
|
49
|
+
white-space: nowrap;
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
text-overflow: ellipsis;
|
|
52
|
+
color: var(--c-info-text);
|
|
53
|
+
transition: color 0.25s;
|
|
54
|
+
|
|
55
|
+
&:hover {
|
|
56
|
+
color: var(--c-info-text-dark);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
</style>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, useSlots } from 'vue'
|
|
3
|
+
import { format } from '../support/Num'
|
|
4
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<{
|
|
7
|
+
value?: number | null
|
|
8
|
+
separator?: boolean
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
const slots = useSlots()
|
|
12
|
+
|
|
13
|
+
const _value = computed(() => {
|
|
14
|
+
const slotValue = slots.default?.()[0].children
|
|
15
|
+
|
|
16
|
+
const v = (typeof slotValue === 'string') ? Number(slotValue) : props.value
|
|
17
|
+
|
|
18
|
+
if (v == null) {
|
|
19
|
+
return null
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return props.separator ? format(v) : v
|
|
23
|
+
})
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<template>
|
|
27
|
+
<div v-if="_value" class="SDescNumber">
|
|
28
|
+
<div class="value">
|
|
29
|
+
{{ _value }}
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
<SDescEmpty v-else />
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<style scoped lang="postcss">
|
|
36
|
+
.SDescNumber {
|
|
37
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
38
|
+
padding-bottom: 7px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.value {
|
|
42
|
+
line-height: 24px;
|
|
43
|
+
font-size: 14px;
|
|
44
|
+
font-weight: 400;
|
|
45
|
+
font-feature-settings: "tnum";
|
|
46
|
+
white-space: nowrap;
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
text-overflow: ellipsis;
|
|
49
|
+
}
|
|
50
|
+
</style>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import { isArray } from '../support/Utils'
|
|
4
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
5
|
+
import SPill, { type Mode } from './SPill.vue'
|
|
6
|
+
|
|
7
|
+
export interface Pill {
|
|
8
|
+
mode?: Mode
|
|
9
|
+
label: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const props = defineProps<{
|
|
13
|
+
pill?: Pill | Pill[] | null
|
|
14
|
+
}>()
|
|
15
|
+
|
|
16
|
+
const pills = computed(() => {
|
|
17
|
+
return props.pill
|
|
18
|
+
? isArray(props.pill) ? props.pill : [props.pill]
|
|
19
|
+
: null
|
|
20
|
+
})
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<div v-if="pills && pills.length" class="SDescPill">
|
|
25
|
+
<div class="value">
|
|
26
|
+
<div v-for="pill, index in pills" :key="index" class="pill">
|
|
27
|
+
<SPill tag="div" size="mini" :mode="pill.mode" :label="pill.label" />
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<SDescEmpty v-else />
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<style scoped lang="postcss">
|
|
35
|
+
.SDescPill {
|
|
36
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
37
|
+
padding-bottom: 7px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.value {
|
|
41
|
+
display: flex;
|
|
42
|
+
gap: 4px 6px;
|
|
43
|
+
flex-wrap: wrap;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.pill {
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
height: 24px;
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
3
|
+
import SState, { type Mode } from './SState.vue'
|
|
4
|
+
|
|
5
|
+
export interface State {
|
|
6
|
+
mode?: Mode
|
|
7
|
+
label: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
defineProps<{
|
|
11
|
+
state?: State | null
|
|
12
|
+
}>()
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<div v-if="state" class="SDescState">
|
|
17
|
+
<div class="value">
|
|
18
|
+
<SState as="div" size="mini" :mode="state.mode" :label="state.label" />
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<SDescEmpty v-else />
|
|
22
|
+
</template>
|
|
23
|
+
|
|
24
|
+
<style scoped lang="postcss">
|
|
25
|
+
.SDescState {
|
|
26
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
27
|
+
padding-bottom: 7px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.value {
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
height: 24px;
|
|
34
|
+
}
|
|
35
|
+
</style>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
value?: string | null
|
|
7
|
+
lineClamp?: string | number
|
|
8
|
+
preWrap?: boolean
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
const classes = computed(() => [
|
|
12
|
+
{ 'line-clamp': props.lineClamp },
|
|
13
|
+
{ 'pre-wrap': props.preWrap }
|
|
14
|
+
])
|
|
15
|
+
|
|
16
|
+
const lineClamp = computed(() => props.lineClamp ?? 'none')
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<div v-if="$slots.default || value" class="SDescText" :class="classes">
|
|
21
|
+
<div class="value">
|
|
22
|
+
<slot v-if="$slots.default" />
|
|
23
|
+
<template v-else>{{ value }}</template>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<SDescEmpty v-else />
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<style scoped lang="postcss">
|
|
30
|
+
.SDescText {
|
|
31
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
32
|
+
padding-bottom: 7px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.value {
|
|
36
|
+
line-height: 24px;
|
|
37
|
+
font-size: 14px;
|
|
38
|
+
font-weight: 400;
|
|
39
|
+
|
|
40
|
+
.SDescText.line-clamp & {
|
|
41
|
+
display: -webkit-box;
|
|
42
|
+
-webkit-line-clamp: v-bind(lineClamp);
|
|
43
|
+
-webkit-box-orient: vertical;
|
|
44
|
+
text-overflow: ellipsis;
|
|
45
|
+
overflow: hidden;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.SDescText.pre-wrap & {
|
|
49
|
+
white-space: pre-wrap;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.value :deep(a) {
|
|
54
|
+
color: var(--c-info-text);
|
|
55
|
+
transition: color 0.25s;
|
|
56
|
+
|
|
57
|
+
&:hover {
|
|
58
|
+
color: var(--c-info-text-dark);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
</style>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
|
|
4
|
+
const props = defineProps<{
|
|
5
|
+
cols?: string | number
|
|
6
|
+
gap?: string | number
|
|
7
|
+
}>()
|
|
8
|
+
|
|
9
|
+
const styles = computed(() => {
|
|
10
|
+
return {
|
|
11
|
+
gridTemplateColumns: `repeat(${props.cols ?? 1}, minmax(0, 1fr))`,
|
|
12
|
+
gap: `${props.gap ?? 0}px`
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<div class="SGrid" :style="styles">
|
|
19
|
+
<slot />
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<style scoped lang="postcss">
|
|
24
|
+
.SGrid {
|
|
25
|
+
display: grid;
|
|
26
|
+
}
|
|
27
|
+
</style>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="SHeadLead">
|
|
3
|
+
<slot />
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<style scoped lang="postcss">
|
|
8
|
+
.SHeadLead {
|
|
9
|
+
line-height: 24px;
|
|
10
|
+
font-size: 14px;
|
|
11
|
+
color: var(--c-text-2);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.SHeadLead :deep(a) {
|
|
15
|
+
color: var(--c-info-text);
|
|
16
|
+
transition: color 0.25s;
|
|
17
|
+
|
|
18
|
+
&:hover {
|
|
19
|
+
color: var(--c-info-text-dark);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
</style>
|
|
@@ -86,7 +86,7 @@ export function useLink({ container, callbacks }: UseLinkOptions): UseLink {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
if (isCallback) {
|
|
89
|
-
const idx = parseInt(target.dataset.callbackId || '')
|
|
89
|
+
const idx = Number.parseInt(target.dataset.callbackId || '')
|
|
90
90
|
const callback = (callbacks ?? [])[idx]
|
|
91
91
|
|
|
92
92
|
if (!callback) {
|
package/lib/mixins/Card.ts
CHANGED
|
@@ -12,19 +12,31 @@ import SCardHeaderActions from '../components/SCardHeaderActions.vue'
|
|
|
12
12
|
import SCardHeaderTitle from '../components/SCardHeaderTitle.vue'
|
|
13
13
|
|
|
14
14
|
export function mixin(app: App): void {
|
|
15
|
-
app.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
app.component('SCard', SCard)
|
|
16
|
+
app.component('SCardBlock', SCardBlock)
|
|
17
|
+
app.component('SCardFooter', SCardFooter)
|
|
18
|
+
app.component('SCardFooterAction', SCardFooterAction)
|
|
19
|
+
app.component('SCardFooterActions', SCardFooterActions)
|
|
20
|
+
app.component('SCardHeader', SCardHeader)
|
|
21
|
+
app.component('SCardHeaderAction', SCardHeaderAction)
|
|
22
|
+
app.component('SCardHeaderActionClose', SCardHeaderActionClose)
|
|
23
|
+
app.component('SCardHeaderActionCollapse', SCardHeaderActionCollapse)
|
|
24
|
+
app.component('SCardHeaderActions', SCardHeaderActions)
|
|
25
|
+
app.component('SCardHeaderTitle', SCardHeaderTitle)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare module 'vue' {
|
|
29
|
+
export interface GlobalComponents {
|
|
30
|
+
SCard: typeof SCard
|
|
31
|
+
SCardBlock: typeof SCardBlock
|
|
32
|
+
SCardFooter: typeof SCardFooter
|
|
33
|
+
SCardFooterAction: typeof SCardFooterAction
|
|
34
|
+
SCardFooterActions: typeof SCardFooterActions
|
|
35
|
+
SCardHeader: typeof SCardHeader
|
|
36
|
+
SCardHeaderAction: typeof SCardHeaderAction
|
|
37
|
+
SCardHeaderActionClose: typeof SCardHeaderActionClose
|
|
38
|
+
SCardHeaderActionCollapse: typeof SCardHeaderActionCollapse
|
|
39
|
+
SCardHeaderActions: typeof SCardHeaderActions
|
|
40
|
+
SCardHeaderTitle: typeof SCardHeaderTitle
|
|
41
|
+
}
|
|
30
42
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type App } from 'vue'
|
|
2
|
+
import SDesc from '../components/SDesc.vue'
|
|
3
|
+
import SDescDay from '../components/SDescDay.vue'
|
|
4
|
+
import SDescEmpty from '../components/SDescEmpty.vue'
|
|
5
|
+
import SDescItem from '../components/SDescItem.vue'
|
|
6
|
+
import SDescLabel from '../components/SDescLabel.vue'
|
|
7
|
+
import SDescLink from '../components/SDescLink.vue'
|
|
8
|
+
import SDescNumber from '../components/SDescNumber.vue'
|
|
9
|
+
import SDescPill from '../components/SDescPill.vue'
|
|
10
|
+
import SDescState from '../components/SDescState.vue'
|
|
11
|
+
import SDescText from '../components/SDescText.vue'
|
|
12
|
+
|
|
13
|
+
export function mixin(app: App): void {
|
|
14
|
+
app.component('SDesc', SDesc)
|
|
15
|
+
app.component('SDescDay', SDescDay)
|
|
16
|
+
app.component('SDescEmpty', SDescEmpty)
|
|
17
|
+
app.component('SDescItem', SDescItem)
|
|
18
|
+
app.component('SDescLabel', SDescLabel)
|
|
19
|
+
app.component('SDescLink', SDescLink)
|
|
20
|
+
app.component('SDescNumber', SDescNumber)
|
|
21
|
+
app.component('SDescPill', SDescPill)
|
|
22
|
+
app.component('SDescState', SDescState)
|
|
23
|
+
app.component('SDescText', SDescText)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare module 'vue' {
|
|
27
|
+
export interface GlobalComponents {
|
|
28
|
+
SDesc: typeof SDesc
|
|
29
|
+
SDescDay: typeof SDescDay
|
|
30
|
+
SDescEmpty: typeof SDescEmpty
|
|
31
|
+
SDescItem: typeof SDescItem
|
|
32
|
+
SDescLabel: typeof SDescLabel
|
|
33
|
+
SDescLink: typeof SDescLink
|
|
34
|
+
SDescNumber: typeof SDescNumber
|
|
35
|
+
SDescPill: typeof SDescPill
|
|
36
|
+
SDescState: typeof SDescState
|
|
37
|
+
SDescText: typeof SDescText
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type App } from 'vue'
|
|
2
|
+
import SGrid from '../components/SGrid.vue'
|
|
3
|
+
import SGridItem from '../components/SGridItem.vue'
|
|
4
|
+
|
|
5
|
+
export function mixin(app: App): void {
|
|
6
|
+
app.component('SGrid', SGrid)
|
|
7
|
+
app.component('SGridItem', SGridItem)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
declare module 'vue' {
|
|
11
|
+
export interface GlobalComponents {
|
|
12
|
+
SGrid: typeof SGrid
|
|
13
|
+
SGridItem: typeof SGridItem
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type App } from 'vue'
|
|
2
|
+
import SHead from '../components/SHead.vue'
|
|
3
|
+
import SHeadLead from '../components/SHeadLead.vue'
|
|
4
|
+
import SHeadTitle from '../components/SHeadTitle.vue'
|
|
5
|
+
|
|
6
|
+
export function mixin(app: App): void {
|
|
7
|
+
app.component('SHead', SHead)
|
|
8
|
+
app.component('SHeadLead', SHeadLead)
|
|
9
|
+
app.component('SHeadTitle', SHeadTitle)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare module 'vue' {
|
|
13
|
+
export interface GlobalComponents {
|
|
14
|
+
SHead: typeof SHead
|
|
15
|
+
SHeadLead: typeof SHeadLead
|
|
16
|
+
SHeadTitle: typeof SHeadTitle
|
|
17
|
+
}
|
|
18
|
+
}
|
package/lib/mixins/Sheet.ts
CHANGED
|
@@ -8,15 +8,23 @@ import SSheetMedium from '../components/SSheetMedium.vue'
|
|
|
8
8
|
import SSheetTitle from '../components/SSheetTitle.vue'
|
|
9
9
|
|
|
10
10
|
export function mixin(app: App): void {
|
|
11
|
-
app.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
app.component('SSheet', SSheet)
|
|
12
|
+
app.component('SSheetFooter', SSheetFooter)
|
|
13
|
+
app.component('SSheetFooterAction', SSheetFooterAction)
|
|
14
|
+
app.component('SSheetFooterActions', SSheetFooterActions)
|
|
15
|
+
app.component('SSheetForm', SSheetForm)
|
|
16
|
+
app.component('SSheetMedium', SSheetMedium)
|
|
17
|
+
app.component('SSheetTitle', SSheetTitle)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
declare module 'vue' {
|
|
21
|
+
export interface GlobalComponents {
|
|
22
|
+
SSheet: typeof SSheet
|
|
23
|
+
SSheetFooter: typeof SSheetFooter
|
|
24
|
+
SSheetFooterAction: typeof SSheetFooterAction
|
|
25
|
+
SSheetFooterActions: typeof SSheetFooterActions
|
|
26
|
+
SSheetForm: typeof SSheetForm
|
|
27
|
+
SSheetMedium: typeof SSheetMedium
|
|
28
|
+
SSheetTitle: typeof SSheetTitle
|
|
29
|
+
}
|
|
22
30
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@globalbrain/sefirot",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.40.0",
|
|
4
4
|
"packageManager": "pnpm@8.6.2",
|
|
5
5
|
"description": "Vue Components for Global Brain Design System.",
|
|
6
6
|
"author": "Kia Ishii <ka.ishii@globalbrains.com>",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"dayjs": "^1.11.7"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@globalbrain/eslint-config": "^1.5.
|
|
50
|
+
"@globalbrain/eslint-config": "^1.5.1",
|
|
51
51
|
"@histoire/plugin-vue": "^0.16.1",
|
|
52
52
|
"@iconify-icons/ph": "^1.2.4",
|
|
53
53
|
"@iconify/vue": "^4.1.1",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@types/markdown-it": "^12.2.3",
|
|
57
57
|
"@types/node": "^20.1.1",
|
|
58
58
|
"@vitejs/plugin-vue": "^4.2.1",
|
|
59
|
-
"@vitest/coverage-c8": "^0.
|
|
59
|
+
"@vitest/coverage-c8": "^0.33.0",
|
|
60
60
|
"@vue/test-utils": "^2.3.2",
|
|
61
61
|
"@vuelidate/core": "^2.0.2",
|
|
62
62
|
"@vuelidate/validators": "^2.0.2",
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"chalk": "^4.1.2",
|
|
66
66
|
"conventional-changelog-cli": "^2.2.2",
|
|
67
67
|
"enquirer": "^2.3.6",
|
|
68
|
-
"eslint": "^8.
|
|
68
|
+
"eslint": "^8.44.0",
|
|
69
69
|
"execa": "^5.1.1",
|
|
70
70
|
"fuse.js": "^6.6.2",
|
|
71
|
-
"happy-dom": "^
|
|
71
|
+
"happy-dom": "^10.1.1",
|
|
72
72
|
"histoire": "^0.16.1",
|
|
73
73
|
"lodash-es": "^4.17.21",
|
|
74
74
|
"markdown-it": "^13.0.1",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"v-calendar": "^3.0.3",
|
|
82
82
|
"vite": "^4.3.5",
|
|
83
83
|
"vitepress": "1.0.0-alpha.75",
|
|
84
|
-
"vitest": "^0.
|
|
84
|
+
"vitest": "^0.33.0",
|
|
85
85
|
"vue": "^3.2.47",
|
|
86
86
|
"vue-router": "^4.1.6",
|
|
87
87
|
"vue-tsc": "^1.7.1",
|